简介
本文介绍如何解决Docker部署nginx做反向代理时出现502报错的问题。
相关网址
情景说明
- web程序和nginx都使用docker部署在Ubuntu
- web程序是8090端口
- 使用nginx做代理,将请求转发到web程序
- web程序和nginx已经使用docker compose connect进行了网络连接
nginx配置如下:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 所有IPV4的地址
listen 80;
# 所有IPV6的地址
listen [::]:80;
server_name 192.168.5.193;
client_max_body_size 20m;
charset utf-8;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://itthinktank;
}
}
upstream itthinktank {
server 127.0.0.1:8090;
}
}
问题复现
访问nginx时出现502页面:

原因分析
docker与docker之间的通信是通过虚拟网桥docker0实现的,需要使用docker0的ip表示本地网络,不能使用127.0.0.1。
解决方案
使用docker0的ip。
1.查看docker0的ip
命令:ifconfig

2.将127.0.0.1改为docker0的ip
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 所有IPV4的地址
listen 80;
# 所有IPV6的地址
listen [::]:80;
server_name 192.168.5.193;
client_max_body_size 20m;
charset utf-8;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://itthinktank;
}
}
upstream itthinktank {
#server 127.0.0.1:8090;
server 172.17.0.1:8090;
}
}

请先 !