Nginx proxy_pass返回404错误:Docker-Compose WordPress网关问题排查
排查Nginx网关转发WordPress容器出现404的问题
我来帮你一步步拆解这个问题——用Docker Compose搭Nginx+WordPress的集群,子路径访问404是挺常见的坑,咱们从容器状态到配置逐一排查:
第一步:先确认WordPress容器本身是否正常运行
首先得排除容器根本没跑起来或者频繁重启的情况:
- 执行
docker-compose ps banburritos,看看状态是不是Up,有没有Restarting的标记。如果是重启状态,直接看容器日志找原因:docker-compose logs banburritos,大概率是数据库连接失败(比如环境变量配错了)。 - 如果容器是Up状态,进到容器内部测一下自身的可用性:
docker exec -it banburritos curl -i http://localhost。如果这里也返回404,那问题就出在WordPress本身——可能是安装没完成、挂载的卷丢失了核心文件,或者wp-config.php里的站点路径配置错了。
第二步:检查Nginx的转发配置是否正确
这是子路径访问404最常见的原因,重点看location /banburritos/的proxy_pass配置:
- 你得确保Nginx配置里的转发路径末尾带斜杠!举个正确的配置示例:
location /banburritos/ { proxy_pass http://banburritos/; # 这里的末尾斜杠必须加! proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
如果proxy_pass没加末尾的斜杠(比如写成proxy_pass http://banburritos;),Nginx会把/banburritos/xxx完整转发给WordPress容器,而WordPress默认监听根路径,自然会返回404。
第三步:修正WordPress的站点路径配置
就算Nginx转发对了,WordPress自身的站点URL没配好也会出问题:
- 进入WordPress容器,用wp-cli快速修改配置(如果没装wp-cli,直接编辑wp-config.php也行):
docker exec -it banburritos wp config set WP_HOME 'http://localhost/banburritos' docker exec -it banburritos wp config set WP_SITEURL 'http://localhost/banburritos'
或者直接在wp-config.php里添加这两行:
define('WP_HOME','http://localhost/banburritos'); define('WP_SITEURL','http://localhost/banburritos');
WordPress会根据这两个参数生成页面链接和资源路径,不配的话,访问子路径时会跳转到根路径,导致404。
第四步:验证数据库连接是否正常
最后再确认一下数据库的环境变量是否匹配:
- 对比
mysql.env和wordpress.env:mysql.env里的MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD要和wordpress.env里的WORDPRESS_DB_NAME、WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD完全一致。WORDPRESS_DB_HOST必须是Docker Compose里mysql服务的名字(比如你的mysql服务叫db,那就是db:3306),不能写localhost,不然WordPress容器会连自己的3306端口,自然连不上数据库。
最后再做一次测试
从Nginx容器内部直接访问WordPress容器:docker exec -it <你的Nginx容器名> curl -i http://banburritos。如果这里能返回正常的WordPress页面,那说明容器网络没问题,调整Nginx配置和WordPress站点URL就能解决;如果这里也404,那继续盯着WordPress容器日志和wp-config.php找问题。
内容的提问来源于stack exchange,提问作者Louis Thibault
相关产品推荐
相关产品推荐

