Docker安装带Certbot的Nginx反向代理返回404错误如何解决
问题排查与解决建议
- 先验证反向代理后端服务可用性
进入Nginx容器内部执行命令curl http://172.17.0.2:80,如果该请求本身就返回404,说明问题出在172.17.0.2对应的后端服务,而非Nginx配置,需要优先排查后端服务的运行状态与路由配置。 - 确认Nginx已加载当前域名配置
执行命令nginx -T(大写T,会打印所有已加载的配置内容),检查输出结果中是否包含你编写的这两个server块。如果没有加载,通常是因为配置文件未放在Nginx的include目录下,或是文件名没有以.conf为后缀导致的。 - 校验访问域名与
server_name匹配性
如果你直接通过IP访问,或是访问的域名和配置中填写的domainname.com/www.domainname.com不一致,会匹配到Nginx的默认server块,直接返回404。可以通过加请求头的方式测试:curl -v -H "Host: domainname.com" 你的服务器公网IP,确认返回结果是否正常。 - 调整80端口的跳转规则
当前配置里80端口的server块仅匹配指定host时才跳转HTTPS,其余所有请求直接返回404。你可以删掉现有两个if判断和最后的return 404行,统一替换为return 301 https://$host$request_uri;,实现所有HTTP请求强制跳转HTTPS,避免非预期的404。 - 检查Docker端口映射配置
确认启动Nginx容器时已经配置了正确的端口映射:-p 80:80 -p 443:443,如果端口映射错误、或是宿主机80/443端口被其他服务占用,也会导致访问到错误的服务返回404。 - 避免使用固定容器IP作为代理目标
Docker容器重启后内部IP会发生变化,会导致代理失效。建议将Nginx容器和后端服务容器加入同一个自定义Docker网络,在proxy_pass中直接填写后端服务的容器名即可,无需写固定IP。
内容的提问来源于stack exchange,提问作者starboi cobie
相关产品推荐
相关产品推荐

