PHP项目搭配Nginx部署时,404错误是出现频率较高的问题,这类错误通常不是代码本身的问题,而是服务配置存在偏差导致的,需要从Nginx配置、PHP-FPM状态、文件路径等多个维度排查。

常见导致404的配置问题
1. Nginx根目录设置错误
如果Nginx的root指令指向的路径和实际PHP项目存放路径不一致,访问时就会找不到对应文件返回404。比如项目实际放在/data/www/php_project,但配置里写成了/data/www/project,就会出现问题。
2. PHP解析配置缺失
Nginx本身无法解析PHP文件,需要配置转发给PHP-FPM处理,如果缺少对应的location ~ .php$配置块,访问PHP文件时Nginx会当成普通文件处理,找不到就会返回404。
3. 伪静态规则配置异常
很多PHP框架需要伪静态规则把请求转发到入口文件,如果规则写错,比如框架需要转发到index.php但规则指向了其他文件,也会触发404。
具体调整方法
修正根目录配置
首先检查Nginx站点配置里的root路径是否正确,确保和实际项目路径一致,同时确认路径的权限是否允许Nginx进程读取。正确的基础配置示例如下:
server {
listen 80;
server_name test.ipipp.com;
# 根目录指向实际项目路径
root /data/www/php_project;
index index.php index.html index.htm;
location / {
# 尝试访问文件,不存在则转发到index.php
try_files $uri $uri/ /index.php?$query_string;
}
}
补全PHP解析配置
在Nginx配置中添加PHP解析的location块,确保PHP请求能转发到PHP-FPM,注意fastcgi_param SCRIPT_FILENAME的路径要和root路径对应,避免路径拼接错误:
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 这里的路径要和上面的root路径一致
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
检查PHP-FPM状态
如果配置都正确还是404,需要确认PHP-FPM是否正常运行,以及监听的端口和Nginx配置里的fastcgi_pass是否匹配。可以通过下面的命令查看PHP-FPM状态:
# 查看PHP-FPM进程是否存在 ps aux | grep php-fpm # 查看监听端口是否正确 netstat -tlnp | grep 9000
排查伪静态规则问题
如果是框架项目,需要确认伪静态规则是否符合框架要求,比如Laravel框架需要把请求都转发到public/index.php,如果根目录直接指向项目根,就需要调整try_files规则:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
排查步骤总结
遇到PHP Nginx配错导致的404时,可以按照以下步骤依次排查:
- 第一步检查Nginx配置的
root路径是否正确,文件是否存在 - 第二步检查PHP解析的
location块是否存在,SCRIPT_FILENAME参数是否正确 - 第三步检查PHP-FPM是否正常运行,监听地址是否和Nginx配置匹配
- 第四步检查伪静态规则是否符合项目框架的要求
调整完配置后,需要执行nginx -s reload命令重载Nginx配置,让修改生效,之后再访问项目验证是否恢复正常。