场景

在本地docker上用nginx部署项目前端的时候遇到的一个问题

页面可以正常预览,但是反向代理向后端发起请求时报502 Bad Gateway,如图

image-20230711230729249

先看一下我nginx的配置

image-20230711230819547

解决思路

使用宿主机的postman直接测试后端接口是没问题的

确保后端服务正常运行的情况下,又去容器内部再测试了一下,发现无法向宿主机目标端口发出请求

观察日志可以发现使用docker部署时,127.0.0.1指向的是容器内部的ip

看了一下宿主机的ip地址是192.168.0.100,那么可以修改一下反向代理的配置

location /api/ {
    proxy_pass   http://192.168.0.100:8080/admin/;
    tcp_nodelay     on;
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这么一测试确实是通了,但其实还有一个问题:宿主机的ip地址会变…

使用host.docker.internal替换localhost即可

host.docker.internal就是宿主机的本地ip

通!

image-20230711232751336