Nginx 篇章-反向代理

講述反向七層代理的配置文件以及解釋

Nginx官網:https://www.nginx.com/

Centos yum安裝nginx

yum install nginx -y

so,我們先提個問題,What?爲何要用Nginx實現七層代理,什麼是七層代理?

1、有無nginx proxy的區別

傳統無nginx web架構:

看下面一張圖:

Nginx 篇章-反向代理

首先,我們有一個域名 www.test_app.com,後端有三臺服務器,都運行PHP+Nginx服務,如果要實現三臺服務器都提供網站服務,我們需要具備下面幾個條件(缺點)。

1、每臺web服務器都需要有固定的公網IP地址(成本高)
2、一個域名需要對應多個公網IP(擴展性差)
3、每添加一臺web服務器都需要動用dns配置以及購買固定公網IP(靈活性差)

so,缺點很明顯了

nginx proxy架構:

Nginx 篇章-反向代理

這時,我們在前端部署一臺nginx proxy(反向代理),就可以解決剛纔上面所說的問題,可以在nginx proxy配置proxy pool,稱爲代理池,裏面填寫後端web節點的IP:PORT,每次擴展一臺Web節點的時候,只需要在該proxy pool中添加IP:PORT,然後在reload一下nginx即可,並且該nginx proxy只需要有一個固定的公網IP即可,DNS只需要綁定該公網IP

2、Nginx Proxy簡介
Nginx的負載均衡功能依賴於ngx_http_upsteam_module模塊,所支持的代理方式包括proxy_pass,fastcgi_pass,memcached_pass等,新版Nginx軟件支持的方式有所增加。本文主要講解proxy_pass代理方式。
ngx_http_upstream_module模塊允許Nginx定義一組或多組節點服務器組,使用時可以通過proxy_pass代理方式把網站的請求發送到事先定義好的對應Upstream組的名字上,具體寫法爲“proxy_pass http:// www_server_pools”,其中www_server_pools就是一個Upstream節點服務器組名字。

upstream模塊內部server標籤部分參數說明:

模塊參數 說明
server 負載均衡後面的RS地址,可域名或IP
weight 服務器權重,權重數字越大表示請求越多,默認爲1
max_fils 嘗試連接後端節點失敗的次數,默認爲1
backup 表示節點作爲備份服務器
fail_timeout 在max_fails定義次數失敗後,距離下次檢查間隔時間

3、Nginx Proxy調度算法
靜態調度算法:

算法 說明
rr 輪詢,默認調度算法,將請求按順序分配到不同的後端節點
wrr 權重輪詢,權重值越大,後端節點接受的請求也就越多
ip_hash 會話保持,每個請求按照客戶端的IP的Hash結果來分配後端節點

動態調度算法:

算法 說明
fair 響應時間,根據後端節點的響應時間來分配請求
least_conn 最小連接數,根據後端節點的連接數來分配請求
url_hash web緩存節點,根據訪問的URL的hash結果來分配請求

注意調度算法只能使用一種

nginx proxy常見配置文件(多域名):

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 這是代理池,池子名:blog_server_pools,將web節點的IP:PORT/域名 添加到此即可
    upstream blog_server_pools {    
                    server 172.16.1.7:80 weight=3 max_fils=3 fail_timeout=5;
                    server 172.16.1.8:80 weight=2 max_fils=3 fail_timeout=5;
                    server 172.16.1.9:80 weight=1 backup max_fils=3 fail_timeout=5; 
           }

      upstream www_server_pools {    
                     # 使用調度算法:ip_hash 
                     ip_hash
                     server 172.16.1.10:80  max_fils=3 fail_timeout=5;
                     server 172.16.1.11:80 max_fils=3 fail_timeout=5;
                     server 172.16.1.12:80 weight=1 backup max_fils=3 fail_timeout=5;   
           }

    server {          
        listen       80;
        server_name  blog.youngboy.org;
        location / {
        # 通過proxy_pass 調用對應的代理池
        proxy_pass http://blog_server_pools; 
        # proxy優化參數(下面有解釋)
        proxy_redirect default;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_buffer_size 32k;
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_temp_file_write_size 256k;

                   }
       }
    server {          
        listen       80;
        server_name  www.youngboy.org;
        location / {
        proxy_pass http://www_server_pools; 
        proxy_redirect default;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_buffer_size 32k;
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_temp_file_write_size 256k;

                   }
       }     
}

我們會發現。每添加一個server標籤(一個站點),都需要將nginx proxy參數粘貼一遍,這樣會導致配置冗餘
我們可以將proxy優化參數配置寫到一個文件中

# vim /etc/nginx/conf.d/http.proxy
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;

在nginx http標籤下,使用include來引入剛剛創建的proxy文件

....
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
        include /etc/nginx/conf.d/http.proxy;
....
}

平滑重啓nginx

nginx -s reload

4、Nginx Proxy優化參數

# 設置http請求header項傳給後端服務器節點
proxy_set_header

# 用於指定客戶端請求主體緩衝區大小
client_body_buffer_size 

# 表示反向代理與後端節點服務器連接的超時時間,即發起握手等待響應的超時時間
proxy_connect_timeout   

# 表示代理後端服務器的數據回傳時間,即在規定時間內服務器必須傳完所有的數據,否則,Nginx將斷開這個連接
proxy_sed_simeout   

# 設置Nginx從從代理的後端服務器獲取信息的時間,表示連接建立成功後,Nginx等待後端服務器的響應時間,其實是Nginx已經進入後端的派對之中等候處理的時間
proxy_read_timeout  

# 設置緩衝區大小,默認該緩衝區大小等於指令proxy_buffers設置的大小
proxy_buffer_size   

# 設置緩衝區的數量和大小。Nginx從代理後端的服務器獲取的響應信息,會防止緩衝區
proxy_buffers   

# 用於設置系統很忙時可以使用的proxy_buffers大小,官方推薦的大小爲proxy_buffers*2
proxy_busy_buffers_size 

# 指定proxy緩存臨時文件的大小
proxy_temp_file_write_size  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章