2024-03-10 22:47:09
在Ubuntu下使用Nginx部署PHP项目出现404错误时,核心原因通常与配置文件中的端口、路径、PHP处理指令或PHP-FPM状态不匹配有关。以下是分步解决方案:
1. 检查并修正端口配置修改Nginx配置文件中的listen指令,确保端口与实际一致:server { listen 8088; # 修改为实际使用的端口 server_name
重启Nginx服务使配置生效:sudo systemctl restart 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用户有权限
确保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端口
修改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;
启动PHP-FPM服务:sudo systemctl start php-fpm # 或 php7.x-fpm
查看PHP-FPM日志定位错误:sudo tail -f /var/log/php-fpm.log # 日志路径可能因系统而异
测试Nginx配置语法:sudo nginx -t
根据提示修正语法错误后重启Nginx:sudo systemctl restart nginx
开放端口(如8088):sudo ufw allow 8088/tcp # Ubuntu默认防火墙
临时禁用SELinux测试(CentOS等系统):sudo setenforce 0
完成上述步骤后,访问项目URL测试是否恢复正常。若问题依旧,可结合日志进一步分析。