1. 程式人生 > 實用技巧 >nginx容器之間代理

nginx容器之間代理

反向代理端

[root@server01 nginx]# ll
總用量 4
-rw-r--r-- 1 root root 1383 1月  19 13:23 default.conf
[root@server01 nginx]# cat default.conf 
upstream node1 {
        server 192.168.0.221:82;
        server 192.168.0.221;
}


server {
    listen  80;
    server_name  192.168.0.220;
    access_log  /var/log/nginx/forward.access.log  main;
    error_log   
/var/log/nginx/forward.error.log warn; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允許客戶端請求的最大單檔案位元組數 client_body_buffer_size 128k; #緩衝區代理緩衝使用者端請求的最大位元組數 proxy_connect_timeout
300; #nginx跟後端伺服器連線超時時間(代理連線超時) proxy_send_timeout 300; #後端伺服器資料回傳時間(代理髮送超時) proxy_read_timeout 300; #連線成功後,後端伺服器響應時間(代理接收超時) proxy_buffer_size 4k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers
*2) proxy_temp_file_write_size 64k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳 location / { proxy_pass http://node1; } }

啟動容器

docker run -it --name nginx -p 80:80 -v /nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx:latest

後端伺服器

啟動兩個nginx容器
docker run -it --name nginx1 -p 82:80 -d nginx:latest
docker run -it --name nginx -p 80:80 -d nginx1:latest

網頁內容

[root@server02 nginx]# docker exec -it nginx /bin/bash
root@bb26273d260b:/# cat /usr/share/nginx/html/index.html 
port test
192.168.0.221
root@bb26273d260b:/# exit
[root@server02 nginx]# docker exec -it nginx1 /bin/bash
root@f0d8409e7e14:/# cat /usr/share/nginx/html/index.html
123456
root@f0d8409e7e14:/# exit
exit
[root@server02 nginx]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS             PORTS                NAMES
f0d8409e7e14   nginx:latest   "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes      0.0.0.0:82->80/tcp   nginx1
bb26273d260b   nginx:latest   "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:80->80/tcp   nginx

測試

[root@server01 nginx]# curl localhost
123456
[root@server01 nginx]# curl localhost
port test
192.168.0.221
[root@server01 nginx]# curl localhost
123456
[root@server01 nginx]# curl localhost
port test
192.168.0.221
[root@server01 nginx]# curl localhost
123456
[root@server01 nginx]# curl localhost
port test
192.168.0.221

單機上兩個nginx容器代理

先啟動兩個nginx容器
docker run -it --name nginx2 -p 82:80 -d nginx1:latest
docker run -it --name nginx2 -p 83:80 -d nginx2:latest
[root@server01 nginx]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                NAMES
9885bdc24a54   nginx:latest   "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   0.0.0.0:83->80/tcp   nginx2
e02eb72e071a   nginx:latest   "/docker-entrypoint.…"   19 minutes ago   Up 19 minutes   0.0.0.0:82->80/tcp   nginx1
docker run -it --name nginx -p 80:80 --link nginx1 --link nginx2  -v /nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx:latest
[root@server01 nginx]# cat default.conf 
upstream node1 {
        server nginx1:80;
        server nginx2:80;
}


server {
    listen  80;
    server_name  192.168.0.220;
    access_log  /var/log/nginx/forward.access.log  main;
    error_log   /var/log/nginx/forward.error.log  warn;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    location / {
        proxy_pass   http://node1;

}
}
[root@server01 nginx]# 

不同主機間nginx容器代理

192.168.0.221啟動三個nginx容器

docker run -it --name nginx5 -p 85:80 -d nginx:latest
docker run -it --name nginx1 -p 82:80 -d nginx:latest
docker run -it --name nginx -p 80:80 -d nginx:latest

寫好每個nginx容器的index.html,內容不要相同。

192.168.0.220啟動一個容器

[root@server01 nginx]# cat default.conf 
upstream node1 {
        server 192.168.0.221:85;
        server 192.168.0.221:80;
        server 192.168.0.221:82;
}


server {
    listen  80;
    server_name  192.168.0.220;
    access_log  /var/log/nginx/forward.access.log  main;
    error_log   /var/log/nginx/forward.error.log  warn;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    location / {
        proxy_pass   http://node1;

}
}

啟動容器

docker run -it --name nginx -p 80:80  -v /nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx:latest

測試:

[root@server01 nginx]# curl localhost
123456
[root@server01 nginx]# curl localhost
jdfhskdjfh
[root@server01 nginx]# curl localhost
port test
192.168.0.221
[root@server01 nginx]# curl localhost
123456
[root@server01 nginx]# curl localhost
jdfhskdjfh
[root@server01 nginx]# curl localhost
port test
192.168.0.221