nginx的的运行方式不同,配置文件中proxy_pass也需进行相应的配置,下面介绍几种:
1. Nginx 运行在宿主机
代理到本地服务:
bash
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
代理到远程服务器:
192.168.1.100为远程服务器上的ip地址,需根据实际进行替换
bash
location /app/ {
proxy_pass http://192.168.1.100:3000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
2. Nginx 运行在 Docker 容器
第1种:使用 Docker 容器名称(推荐)
app-container为容器名称,8080为容器对外暴露的端口。
bash
upstream backend {
server app-container:8080;
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
使用该方式须确保关联的容器在同一网络中,可以使用下面的的方式让容器处在同一网络中
使用Docker 网络来解耦容器 IP,下面代码创建了app-net的Docker网络,然后将app容器连接上app-net网络,再将nginx容器连接上app-net网络,最后nginx容器中就可以像上面这样进行配置。
bash
docker network create app-net
docker network connect app-net myapp
docker network connect app-net nginx
第2种:使用 Docker 网络 IP
bash
location /api/ {
proxy_pass http://172.18.0.2:3000;
proxy_set_header Host $host;
}
上面代码中的172.18.0.2为容器的ip,可能通过docker inspect 容器id或名称获得
通过Networks中的IPAddress字段获得

推荐使用容器名称的方式,因为容器重启可能会导致IPAddress变化。