Docker部署Nginx+MySQL+PHP7.4的Laravel项目全路由返回404求助
Docker部署Laravel全路由返回404问题排查方案
- 第一步:验证Nginx配置有效性
进入Nginx容器执行docker exec -it web sh,依次执行如下命令:
检查配置语法是否正确,如返回success再执行nginx -tnginx -s reload重载配置。同时确认你本地docker/nginx目录下的配置文件后缀必须为.conf,否则Nginx不会自动加载该配置。如需定位具体错误可查看Nginx错误日志:cat /var/log/nginx/error.log - 第二步:校验目录挂载正确性
进入Nginx容器后执行ls /var/www/public,确认目录下存在Laravel的入口文件index.php。如果返回文件不存在,说明你的挂载路径配置错误:你的docker-compose.yml中把宿主机当前目录挂载到了容器内的/var/www,请确认宿主机docker-compose.yml所在目录下是否直接存放Laravel项目,若Laravel项目存放在子目录(如src目录),需要把所有服务中volumes挂载的./:/var/www修改为./src:/var/www。 - 第三步:修正Laravel目录权限
进入PHP容器执行docker exec -it app sh,执行如下命令修正权限:
权限不足会导致Laravel无法正常写入缓存、日志文件,触发异常404。chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache chmod -R 775 /var/www/storage /var/www/bootstrap/cache - 第四步:优化Nginx伪静态规则
把你的docker/nginx/app.conf中location /段的配置修改为Laravel官方推荐写法:
修改后重载Nginx配置即可。location / { try_files $uri $uri/ /index.php?$query_string; } - 第五步:清除Laravel路由缓存
进入PHP容器执行如下命令清除已缓存的路由:
若你部署时执行过php artisan route:clearphp artisan route:cache,后续新增路由没有重新生成缓存的情况下会触发404。 - 第六步:开启调试定位问题
修改Laravel项目.env文件,将APP_DEBUG=false改为APP_DEBUG=true,重新访问页面即可看到具体的错误提示,进一步定位根因。
内容的提问来源于stack exchange,提问作者TCS
相关产品推荐
相关产品推荐

