1. 程式人生 > 其它 >nginx-http反向代理與負載均衡

nginx-http反向代理與負載均衡

前言

反向代理伺服器位於使用者與目標伺服器之間,但是對於使用者而言,反向代理伺服器就相當於目標伺服器,即使用者直接訪問反向代理伺服器就可以獲得目標伺服器的資源。同時,使用者不需要知道目標伺服器的地址,也無須在使用者端作任何設定。反向代理伺服器通常可用來作為Web加速,即使用反向代理作為Web伺服器的前置機來降低網路和伺服器的負載,提高訪問效率。——摘自百度百科

簡單的HTTP反向代理

nginx預設集成了代理模組,因此可以直接在server域配置proxy_pass實現反向代理。

假設nginx伺服器的IP為192.168.0.10,後端伺服器

server {
    listen 80;
    location / {
        proxy_pass http://192.168.0.11:8000;
    }
}

負載均衡

負載均衡需要在upstream域配置,示例:

http {
    # ...
    upstream backend {
        server 192.168.0.11:80 weight=80;
        server 192.168.0.12:80;
        server 192.168.0.13:80 backup;
    }
    server {
        location / {
            proxy_pass http://backend;
        }
    }

}

後端伺服器指令引數

  • weight: 權重,預設為1。示例: weight=80
  • max_fails: 最大失敗數,預設為1。示例: max_fails=3。被代理伺服器在fail_timeout規定時間內的最大請求失敗數,超過設定次數後,被代理伺服器便被認為不可用。
  • fail_timeout: 失敗超時,預設為10s。示例:fail_timeout=15s。被代理伺服器被置為不可用的最長時間。
  • backup: 備份伺服器。將被代理伺服器標記為備份伺服器,當其他非備份伺服器不可用時,會把請求轉發給備份伺服器。
  • down: 無效伺服器。將被代理伺服器標記為無效伺服器。
  • max_conn: 最大連線數,預設為0,表示沒限制。示例:max_conn=100。與被代理伺服器建立活動連線的最大數量。

負載均衡策略

預設負載均衡策略為輪詢,通過權重配置可實現加權輪詢。

  • hash:雜湊策略。(暫時還沒試過咋用)
  • ip_hash:確保同一個客戶端的請求總會被同一個被代理伺服器處理。
  • least_conn:最少連線策略。在考慮被代理伺服器組權重的前提下,將客戶端請求分配給擁有最少活躍連線數的被代理伺服器。
  • random:隨機負載策略。將客戶端請求隨機分配給被代理伺服器。

負載均衡長連線

預設配置下,HTTP協議的負載均衡與被代理伺服器之間的連線都是HTTP/1.0的短連線。如果使用長連線,可以在一個TCP連線中傳輸多個HTTP請求和響應,減少了建立和關閉TCP連線的消耗和延遲,提高了傳輸效率。

配置示例:

upstream backend {
    server 192.168.0.11:80;
    server 192.168.0.12:80;
    # 長連線快取池大小為32
    keepalive 32;
    # 每條長連線最大複用請求數為2000
    keepalive_requests 2000;
}

server {
    location/ {
        proxy_pass http://backend;
        # 啟用http/1.1版本與被代理伺服器建立連線
        proxy_http_version 1.1;
        # 清空請求頭屬性欄位Connection的內容
        proxy_set_header Connection "";
    }
}

反向代理簡單優化

http {
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
    tcp_nodelay off;
    server {
        listen 8081;
        location / {
            proxy_pass http://192.168.67.232:80/;
            # 啟用響應資料緩衝區
            proxy_buffering on;
            # 設定每個HTTP請求讀取上游伺服器響應資料緩衝區的大小為64KB
            proxy_buffers 8 8k;
            # 設定每個HTTP請求讀取響應資料第一部分緩衝區的大小為8KB
            proxy_buffer_size 8k;
            # 接收上游伺服器返回響應資料時,同時用於向客戶端傳送響應的緩衝區的大小為16KB
            proxy_busy_buffers_size 16k;
            # 不限制每個HTTP請求每秒讀取上游伺服器響應資料的流量
            proxy_limit_rate 0;
            # 啟用客戶端HTTP請求讀取緩衝區功能
            proxy_request_buffering on;
            # 設定傳送給上游伺服器的頭屬性欄位Host為客戶端請求頭欄位Host的值
            proxy_set_header Host $host:$server_port;
            # 設定傳送給上游伺服器的頭屬性欄位X-Real-IP為客戶端IP
            proxy_set_header X-Real-IP $remote_addr;
            # 設定用於快取的共享記憶體
            proxy_cache STATIC;
            # 設定200響應碼的快取時間為1天
            proxy_cache_valid 200 1d;
            # 出現指定條件時,使用已經過期的快取響應
            proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        }
    }
}