用nginx docker 做反向代理出现502 Bad Gateway

用nginx docker 做反向代理出现502 Bad Gateway

主机上有个nodejs应用:http://127.0.0.1:8888,外网不能直接访问端口8888,只能访问80端口,想通过nginx做反向代理来访问nodejs应用 。
具体步骤如下:

启动nginx

  1. 使用docker启动nginx
sudo docker run --name=nginx \ -p 80:80 \ -v /home/dev/nginx/web/www:/usr/share/nginx/html \ -v /home/dev/nginx/web/conf.d:/etc/nginx/conf.d \ -d nginx 
  1. 配置nginx
    编辑 /home/dev/nginx/web/conf.d/default.conf 配置如下:
server { listen 80; access_log /usr/share/nginx/html/mylog.log; error_log /usr/share/nginx/html/myerror.log; location / { proxy_redirect off; 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_pass http://127.0.0.1:8888; } } 

地址 http://127.0.0.1:8888 是 nodejs 编写的一个hello world实例,可以正常访问

  1. 重启nginx
 sudo docker exec -it nginx /etc/init.d/nginx reload 
  1. 测试
$ curl 127.0.0.1:80 <html> <head><title>502 Bad Gateway</title></head> <body> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.15.6</center> </body> </html> 

出现了502错误,检查了半天的nginx配置,后来发现反向代理地址配置有问题:

 proxy_pass http://127.0.0.1:8888; 

因为nginx在docker中,所以不能使用127.0.0.1:8888来访问宿主机里的nodejs应用,docker内部实际上实现了一个虚拟网桥docker0,所以要通过宿主机内网地址(192.168.102.1)来访问.
将nginx配置改为:

server { listen 80; access_log /usr/share/nginx/html/mylog.log; error_log /usr/share/nginx/html/myerror.log; location / { proxy_redirect off; 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_pass http://192.168.102.1:8888; } } 

问题完美解决!

原文链接:https://blog.csdn.net/weixin_43688089/article/details/84112726

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享