在Ubuntu系统中使用Nginx部署PHP项目出现404错误,核心问题通常与Nginx和PHP-FPM的交互配置有关,尤其是location块的设置。以下是具体解决方案:
1. 检查并修正Nginx配置文件关键错误在于location块未正确转发PHP请求到PHP-FPM。以下是一个经过验证的配置示例:
server { listen 8088; # 确保与实际监听端口一致 server_name your_domain_or_IP; root /path/to/your/project/public; # 替换为项目public目录的实际路径 location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$args; # 确保未找到文件时转发到index.php } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; # PHP-FPM默认监听地址和端口 fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; }}需修改的关键项:
- root:必须指向项目的public目录(如ThinkPHP、Laravel等框架的入口目录)。
- fastcgi_pass:确认PHP-FPM的监听地址和端口(默认127.0.0.1:9000,可通过netstat -tulnp | grep php-fpm检查)。
- server_name:若未配置域名,可暂时设为_或服务器IP。
2. 验证PHP-FPM服务状态- 启动PHP-FPM(若未运行):sudo systemctl start php-fpm # 根据版本调整,如php8.1-fpm
- 检查服务状态:sudo systemctl status php-fpm若未启动,需根据错误日志(通常在/var/log/php-fpm.log)排查问题。
3. 检查文件权限- 项目目录权限:确保Nginx用户(如www-data)有读取权限:sudo chown -R www-data:www-data /path/to/your/projectsudo chmod -R 755 /path/to/your/project
- PHP-FPM用户配置:确认/etc/php/8.x/fpm/pool.d/
www.conf
中的user和group与Nginx用户一致(默认为www-data)。
4. 测试Nginx配置并重载- 检查语法错误:sudo nginx -t
- 重载配置:sudo systemctl reload nginx
5. 其他常见问题排查- 端口冲突:确保8088端口未被其他服务占用(sudo netstat -tulnp | grep 8088)。
- 防火墙设置:若使用UFW,允许8088端口:sudo ufw allow 8088/tcp
- 框架路由问题:某些PHP框架(如ThinkPHP)需在public目录下放置.htaccess或配置路由重写规则。若使用Nginx,需确保try_files指令正确处理URL(如示例中的/index.php?$args)。
6. 参考扩展配置- ThinkPHP6专项配置:搜索关键词“thinkphp6 nginx fastcgi”,可参考以下调整:location / { try_files $uri $uri/ /index.php$is_args$args;}
- 多项目部署:若需部署多个项目,需为每个server块配置独立的root和server_name。
总结步骤- 修正Nginx配置中的root、fastcgi_pass和try_files。
- 启动并验证PHP-FPM服务。
- 检查文件权限和用户组。
- 测试Nginx配置并重载服务。
- 排查端口、防火墙及框架路由问题。
通过以上步骤,404错误通常可解决。若问题依旧,建议检查Nginx错误日志(/var/log/nginx/error.log)和PHP-FPM日志以定位具体原因。