Nginx Proxy

同一 Host 中 Container 的数量越来越多,分别绑定了不同的端口,但域名后加端口的方式显得很 Low,想通过在Host上配置一个 Proxy,将不同的域名分发到对应的端口上。

nginx proxy

配置 Nginx Proxy

1
$ sudo docker pull nginx

启动脚本

1
2
3
4
5
6
7
sudo docker run --name=nginxproxy -d \
--publish=80:80 \
--volume=/opt/nginx/html:/usr/share/nginx/html \
--volume=/opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
--volume=/opt/nginx/conf.d:/etc/nginx/conf.d \
--volume=/opt/nginx/certs:/etc/nginx/certs \
nginx:latest

nginx 站点配置:

在 Host /opt/nginx/conf.d 下建立 server 配置文件:

blog.lanvige.com
1
2
3
4
5
6
7
8
server {
listen 80;
server_name blog.lanvige.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
git.lanvige.com
1
2
3
4
5
6
7
8
server {
listen 80;
server_name git.lanvige.com;
location / {
proxy_pass http://127.0.0.1:8088;
}
}

重启 nginx docker

重启 docker 后,设置生效,可通过浏览器访问。

1
$ sudo docker restart nginxproxy

对于这种 HTTP 转发的基本配置还是很简单的,无论背后是 Apache、Nginx 还是其它,都可以使用。

负载均衡

除了转发之外,nginx 最多做的还是负载均衡,就是将请求分配到多台服务器上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
upstream up_lanvige {
ip_hash;
server a.lanvige.com;
server b.lanvige.com;
server c.lanvige.com;
server d.lanvige.com;
}
server {
listen 80;
server_name blog.lanvige.com;
location / {
proxy_pass http://up_lanvige;
}
}

关于负载均衡的配置还有很多,如权重,具体参阅文档。

REF::