Debian12下Nginx代理Laravel出现502 Bad Gateway故障排查求助
解决Laravel部署后Nginx 502 Bad Gateway及目录索引禁止问题
核心问题分析
从错误日志和配置能定位两个关键矛盾点:
- Nginx实际访问的是
/var/www/html/laravel/current/根目录,而非你配置的/public子目录——说明你写的站点配置未生效,Nginx用了默认配置 - 请求端口为
8000,但站点配置监听的是80端口,同时你启动了php artisan serve(默认监听8000)——开发服务和生产服务冲突,导致路由混乱
分步解决方案
1. 确保站点配置正确启用
- 先修改
nginx.conf,删除include /etc/nginx/sites-available/*;这一行——sites-available存放的是未启用的配置,仅需加载sites-enabled里的软链接文件 - 为你的站点配置创建软链接到启用目录:
sudo ln -s /etc/nginx/sites-available/filename.conf /etc/nginx/sites-enabled/ - 验证Nginx配置语法:
sudo nginx -t - 重启Nginx使配置生效:
sudo systemctl restart nginx
2. 停止开发服务,改用Nginx+PHP-FPM运行
php artisan serve仅适合本地开发,生产环境必须用Nginx+PHP-FPM组合,两者同时运行会导致端口冲突:
# 终止所有artisan serve进程 sudo pkill -f "php artisan serve"
3. 验证PHP-FPM状态与配置匹配
- 检查PHP-FPM是否正常运行:
未运行则启动:sudo systemctl status php8.1-fpmsudo systemctl start php8.1-fpm - 确认站点配置里的
fastcgi_pass指向的socket文件存在:
如果不存在,打开ls -l /var/run/php/php8.1-fpm.sock/etc/php/8.1/fpm/pool.d/www.conf,检查listen参数是否为/var/run/php/php8.1-fpm.sock,修改后重启PHP-FPM:sudo systemctl restart php8.1-fpm
4. 修复Laravel目录权限
确保Nginx进程能读取和写入必要文件:
# 设置目录所有者为Nginx运行用户www-data sudo chown -R www-data:www-data /var/www/html/laravel/current # 设置基础文件权限 sudo chmod -R 755 /var/www/html/laravel/current # 给存储和缓存目录写入权限 sudo chmod -R 775 /var/www/html/laravel/current/storage /var/www/html/laravel/current/bootstrap/cache
5. 测试访问
直接访问服务器的80端口(无需加:8000),若配置正确,Laravel应用应正常加载。
额外检查项
- 确认服务器防火墙允许80端口入站:
sudo ufw allow 80/tcp - 清除Laravel缓存避免配置残留:
cd /var/www/html/laravel/current php artisan config:clear php artisan cache:clear php artisan view:clear
内容的提问来源于stack exchange,提问作者Geert Van Der Weide
相关产品推荐
相关产品推荐

