部署Docker服务,Nginx反向代理报错502 GateWay(踩坑)

1、前言

最近申请了一个域名,准备将自己的用Hallo搭的个人博客上线,因为我还没来得及ICP备案,所以域名端口80和8080都是不能直接访问的,云服务器厂商会直接拦截的,我就心想用Nginx进行反向代理,监听80和443(443是https的端口号,因为我申请了一个免费的SSL证书),将请求反向代理到8090端口(因为8080和80都不能放服务,所以我把个人博客项目的端口号设置为了8090)。

然后我访问我的域名,结果一直出现502 GateWay的报错信息,最终找了半天的问题,发现是ip地址的问题!

2、问题再现

这是我出现问题的nginx.conf的配置,可能有小伙伴觉得这样写没有什么问题呀,监听443请求反向代理到本地的8090端口服务,监听80端口直接重定向到https请求。我当时也是这样觉得,结果啪啪打脸。这里的问题就在127.0.0.1

3、问题分析

因为我的个人博客是在docker容器中运行的,所以会牵涉到一个宿主机和容器的映射关系,这里就要说一下docker的实现原理,服务在docker容器中会有一个单独的虚拟空间进行运行(可以理解为每一个容器就类似于一个单独的虚拟机,ip和端口都是独立的,而且容器只能内网访问,外网是无法直接访问容器的),那么之所以我们访问宿主机的ip和端口,就是因为在启动docker镜像时,我们设置了宿主机和容器的端口映射,比如下面这段代码

bash 复制代码
docker run -d -p 8090:8090 --name my_project halo-pro:2.17.1

-p 8090:8090就是进行宿主机和容器间的端口映射

那么,现在再分析一下问题的所在,我们在nginx.conf监听443请求,proxy_pass中代理到了127.0.0.1,也就是宿主机本地,但是我们的hallo服务用的是容器内部的ip地址,显然宿主机ip和容器ip出现不匹配,所以一直访问不到服务。那么解决思路就是将127.0.0.1换成我们的服务器ip就可以了,这样就可以通过服务器ip进行映射到容器内部的hallo服务ip,进行访问。

相关推荐
朝阳58143 分钟前
MySQL 主从复制 — Docker 双机灾备方案
数据库·mysql·docker
ai产品老杨1 小时前
【架构实战】如何基于 Docker 与边缘计算构建企业级 AI 视频管理平台?打通 GB28181/RTSP 统一接入与异构算力调度,全量源码交付破解集成痛点
人工智能·docker·架构
IT策士1 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:第18篇 从 Docker Compose 到 Kubernetes 的思考
docker·容器·kubernetes
linmengmeng_13142 小时前
【总结】Docker 容器重建后 Nginx 502 问题排查与解决
nginx·docker·容器
Plastic garden2 小时前
Docker(3)Docker 镜像 & Dockerfile
运维·docker·容器
“码”力全开2 小时前
解耦异构算力与多协议接入:基于Docker与源码交付的开源GB28181/RTSP边缘计算AI视频管理平台架构深度解析
人工智能·docker·开源
m0_740859622 小时前
Docker安装常见数据库命令汇总(2026)
数据库·docker·容器
taiguisheng2 小时前
Docker中编译esp32
windows·docker·esp32
IT策士2 小时前
第16篇 实战:用 Docker Compose 编排 WordPress 与 MySQL
mysql·docker·容器
“码”力全开2 小时前
解耦流媒体与AI推理:基于Docker与GB28181/RTSP的边缘计算中台,全量源码交付如何帮集成商节省95%开发成本?
人工智能·docker·边缘计算