Ubuntu下Nginx部署PHP项目出现404错误如何解决?

Ubuntu下Nginx部署PHP项目出现404错误如何解决?
最新回答
风铃鹿

2024-03-10 22:47:09

在Ubuntu下使用Nginx部署PHP项目出现404错误时,核心原因通常与配置文件中的端口、路径、PHP处理指令或PHP-FPM状态不匹配有关。以下是分步解决方案:

1. 检查并修正端口配置
  • 问题:配置文件中listen指令的端口(如80)与实际部署端口(如8088)不一致。
  • 解决

    修改Nginx配置文件中的listen指令,确保端口与实际一致:server { listen 8088; # 修改为实际使用的端口 server_name

    www.h5fiction1.com;
    ...}

    重启Nginx服务使配置生效:sudo systemctl restart nginx

2. 验证项目路径配置
  • 问题:root指令指向的路径错误,导致Nginx无法找到项目文件。
  • 解决

    确保root指令指向项目的public目录(包含index.php):root /var/www/project/public; # 示例路径,需替换为实际路径

    检查路径是否存在且权限正确:ls -ld /var/www/project/public # 确认路径存在sudo chown -R www-data:www-data /var/www/project # 确保Nginx用户有权限

3. 修正PHP处理配置
  • 问题:location ~ .php(.*)$块中的fastcgi_pass或参数配置错误。
  • 解决

    确保fastcgi_pass指向PHP-FPM监听的地址和端口(默认127.0.0.1:9000):location ~ .php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;}

    检查PHP-FPM是否运行并监听正确端口:sudo systemctl status php-fpm # 或 php7.x-fpmnetstat -tulnp | grep 9000 # 确认PHP-FPM监听9000端口

4. 调整路由重写规则(如适用)
  • 问题:项目使用框架(如ThinkPHP)时,路由重写规则不匹配。
  • 解决

    修改location /块中的rewrite指令以匹配框架路由:location / { index index.php index.html; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; }}

    或直接传递请求到index.php(适用于部分框架):try_files $uri $uri/ /index.php?$query_string;

5. 检查PHP-FPM状态与日志
  • 问题:PHP-FPM未运行或配置错误。
  • 解决

    启动PHP-FPM服务:sudo systemctl start php-fpm # 或 php7.x-fpm

    查看PHP-FPM日志定位错误:sudo tail -f /var/log/php-fpm.log # 日志路径可能因系统而异

6. 验证Nginx配置语法
  • 问题:配置文件存在语法错误导致未加载。
  • 解决

    测试Nginx配置语法:sudo nginx -t

    根据提示修正语法错误后重启Nginx:sudo systemctl restart nginx

7. 检查防火墙与SELinux(如适用)
  • 问题:防火墙或SELinux阻止了端口访问。
  • 解决

    开放端口(如8088):sudo ufw allow 8088/tcp # Ubuntu默认防火墙

    临时禁用SELinux测试(CentOS等系统):sudo setenforce 0

总结步骤
  1. 统一端口:确保listen与实际部署端口一致。
  2. 修正路径:检查root指向正确的public目录。
  3. 配置PHP:验证fastcgi_pass和参数是否正确。
  4. 检查服务:确认PHP-FPM运行且监听正确端口。
  5. 调试日志:通过Nginx和PHP-FPM日志定位具体错误。

完成上述步骤后,访问项目URL测试是否恢复正常。若问题依旧,可结合日志进一步分析。