nginx-http反向代理與負載均衡
阿新 • • 發佈:2022-04-19
前言
反向代理伺服器位於使用者與目標伺服器之間,但是對於使用者而言,反向代理伺服器就相當於目標伺服器,即使用者直接訪問反向代理伺服器就可以獲得目標伺服器的資源。同時,使用者不需要知道目標伺服器的地址,也無須在使用者端作任何設定。反向代理伺服器通常可用來作為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;
}
}
}