Nginx 的反向代理设置(三)

Nginx 的反向代理设置(二) 中,我们演示了一个如何通过 Nginx 的代理功能代理内网中运行的业务服务,并通过 proxy_set_header 指令解决在后端业务服务器中获取用户真实IP的问题。 本文将进一步扩展案例,使用 Nginx 作为后端服务的负载均衡器。

增加 app2 容器

要演示负载均衡,我们添加一个后台业务服务器的运行实例,这个在 docker-compose 中设定。 改变后的 docker-compose.yml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '2'

services:
proxy:
image: my-nginx:1.0
container_name: Proxy-Srv
hostname: proxy
ports:
- "80:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
links:
- app1
- app2
depends_on:
- app1
- app2
app1:
image: hello-servlet:1.0
container_name: App1-Srv
hostname: app1
app2:
image: hello-servlet:1.0
container_name: App2-Srv
hostname: app2

可以看到,我们基于同一个镜像 (image) 建立了两个容器,这两个容器都运行在 Docker 的虚拟网络之上,分别拥有自己的虚拟网络地址,就像运作在内网中的两台主机一样。同时,我们在 proxy 容器的 links 和 depends_on 指令中增加了对 app2 的引用,以便 proxy 可以通过虚拟网络访问到 app1 和 app2。

设置负载均衡

接下来,我们修改 proxy 容器对应的 default.conf 文件。 在 proxy_pass 中通过 upstream 指令来指定多个后端主机。 修改后的文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
upstream testapp {
server app1:8080;
server app2:8080;
}


server {
listen 80 default_server;
listen [::]:80 default_server;


location / {
proxy_pass http://testapp;
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_set_header X-Forwarded-Host $server_name;
}
}
1
docker-compose up -d

既可以打开浏览器查看结果了。

本文标题:Nginx 的反向代理设置(三)

文章作者:晨星

发布时间:2020年12月18日 - 07:12

最后更新:2021年01月19日 - 15:01

原始链接:https://www.mls-tech.info/nginx/nginx-setup-proxy-03/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。