子域名ad.example.com下PHP+Nginx环境异常:CMS安装时install.php出现404错误
看起来你遇到的是Nginx解析深层路径PHP文件时的匹配或路径识别问题,我帮你一步步排查和解决:
先确认文件实际存在性
这是最容易忽略的点:登录服务器检查/usr/local/www/ad.example.com/html/www/admin/目录下,是否真的存在install.php和info.php?毕竟404错误最直接的原因就是请求的文件不在Nginx指定的root路径下。如果文件不存在,先把CMS安装文件完整放到/usr/local/www/ad.example.com/html/目录;如果文件存在,继续往下排查。调整Nginx的PHP处理规则
你的location ~ \.php$块里,部分规则可能干扰了深层路径PHP文件的解析:- 把
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;改成fastcgi_param SCRIPT_FILENAME $request_filename;,$request_filename是Nginx自动组合root和请求URI的变量,比手动拼接更准确。 - 暂时注释掉
fastcgi_split_path_info ^(.+\.php)(/.+)$;(在前面加#),部分场景下这条拆分规则会打乱正常的PHP文件匹配逻辑。
- 把
查看Nginx错误日志找精准线索
你已经配置了专属错误日志,直接查看内容:cat /var/log/nginx/ad.example.com.error.log,日志里会明确说明404的原因——是Nginx找不到文件,还是PHP-FPM无法读取文件?比如显示"No such file or directory"就是路径/文件存在性问题;如果是权限报错,就需要调整文件权限。修复文件和目录权限
Nginx和PHP-FPM的运行用户(通常是nginx或www-data)需要有读取CMS文件的权限,执行以下命令调整:chown -R nginx:nginx /usr/local/www/ad.example.com/html/ chmod -R 755 /usr/local/www/ad.example.com/html/注意替换
nginx:nginx为你服务器实际的运行用户(可通过ps aux | grep nginx查看)。确认端口访问正确性
你的Nginx配置监听的是8000端口,访问时必须带上端口号,比如ad.example.com:8000/www/admin/install.php。如果没带端口就访问,必然会404(除非你做了80转8000的端口转发)。你说ad.example.com/info.php能访问,可能是浏览器自动记住了端口,但还是要确认深层路径的访问是否带了正确端口。
最后,无论修改了哪项配置,都要重启Nginx让配置生效:
systemctl restart nginx
备注:内容来源于stack exchange,提问作者Abel

