Ubuntu环境下Nginx无法执行PHP文件问题求助
刚切换完部署环境就遇到PHP解析的坑,太懂这种头疼的感觉了!结合你给出的配置片段和场景,我整理了几个核心排查点和修复方案:
1. 补全SCRIPT_FILENAME配置(最直接的问题)
你给出的配置里fastcgi_param SCRIPT_FILENAME $document_roo...明显没写完,这是Nginx把PHP脚本路径传递给php-fpm的核心参数,必须补全正确:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
注意要把这个参数放在fastcgi_pass之后,确保php-fpm能拿到准确的脚本路径。
2. 检查php-fpm Socket的权限
你配置的Socket路径是unix:/run/php/php7.0-fpm.sock,得确认两件事:
- 这个Socket文件真实存在:执行
ls -l /run/php/php7.0-fpm.sock验证 - Nginx进程用户(一般是
www-data)有访问权限:执行ls -l /run/php/看Socket的所属组,确保www-data在组内,或者直接调整权限:
sudo chown www-data:www-data /run/php/php7.0-fpm.sock sudo chmod 660 /run/php/php7.0-fpm.sock
改完后重启php-fpm:sudo systemctl restart php7.0-fpm
3. 别漏了HTTPS Server块的PHP配置
你当前的Server块是把HTTP请求重定向到HTTPS,但你没给出HTTPS的Server配置啊!所有实际请求都会转到HTTPS块,如果这个块里没配置PHP解析规则,自然没法执行PHP。
给你个HTTPS Server块的完整参考示例:
server { listen 443 ssl; server_name himeki.net; # 替换成你的SSL证书路径 ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; root /home/wwwroot; index index.html index.php index.htm; # 静态文件直接返回,提升性能 location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ { expires 30d; access_log off; } # PHP解析核心规则 location ~ \.php$ { try_files $uri =404; # 防止脚本路径遍历攻击 fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 引入默认的fastcgi参数集合 } }
4. 核对php-fpm的监听配置
打开php-fpm的池配置文件(通常在/etc/php/7.0/fpm/pool.d/www.conf),确保监听设置和Nginx配置一致:
listen = /run/php/php7.0-fpm.sock
如果这里配置的是TCP端口(比如listen = 127.0.0.1:9000),那Nginx里的fastcgi_pass也要改成127.0.0.1:9000。
5. 验证PHP文件的权限
确保你的PHP文件(比如/home/wwwroot/index.php)允许Nginx/php-fpm读取:
sudo chown www-data:www-data /home/wwwroot/*.php sudo chmod 644 /home/wwwroot/*.php
最后一步:重启服务
修改完所有配置后,记得重启Nginx和php-fpm让配置生效:
sudo systemctl restart nginx sudo systemctl restart php7.0-fpm
如果还是不行,直接看错误日志找线索:
- Nginx错误日志:
/var/log/nginx/error.log - php-fpm错误日志:
/var/log/php/7.0/fpm/error.log
内容的提问来源于stack exchange,提问作者Hork

