nginx 做反向代理時,后端主機有多臺,可以使用 upstream 定義一個后端主機池,在反向代理時直接使用主機池的名字。在 upstream 中可以定義負載均衡調度算法,權重,健康狀態檢測等參數。
例如:
upstream backend { server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10; server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;}
默認請求下,使用 round-robin 調度算法,并有健康狀態檢查和恢復主機的能力。
ningx 還可以使用這些算法:
ip_hash:基于源地址哈希,主要目的是會話保持 least_conn:基于最少活動連接進行調度 sticky:基于 cookie 進行會話綁定,nginx 會在客戶端第一次訪問時插入路由信息到 cookie 中,或者選擇 cookie 中的某個字段的值作為鍵,以后每次請求將基于此信息進行調度基于 cookie 的會話綁定共有 cookie,route 和 learn 三種。
例如,基于 cookie name 的調度:
upstream backend { server backend1.example.com; server backend2.example.com; sticky cookie srv_id expires=1h domain=.example.com path=/;}
使用此主機組進行反向代理:
location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_haeder X-Forwared-For $proxy_add_x_forwarded_for;}
proxy_pass URL 指定代理的后端主機,可以指定 "http" 或 "https" 協議,域名可以是 ip 地址,也可以是 upstream 池名字
如果代理指定的是一個 URI 地址,如 http://127.0.0.1/remote,那么將直接被代理至指定 URI,無論請求的 URI 是什么 如果代理指定的一個主機而沒有 URI,如 http://127.0.0.1,客戶端請求的URI將被傳遞至指定域名 如果 location 中使用模式匹配 url,那么 url 也會被傳遞至代理 URL 的末端 如果 location 中使用了 URI 重寫,那么 proxy_pass 會使用重寫后的結果進行處理proxy_set_header HEADER VALUE 對轉發的報文首部進行修改一些
反向代理時的緩存相關設定
proxy_cache_path PATH [levels=levels] keys_zone=NAME:SIZE
定義磁盤緩存路徑,nignx 的緩存是以鍵值方式存放的,keys_zone 用于指定鍵存放的內存空間名字和大小,對應的值則存放在 PATH 指定的路徑中。levels 可以指定緩存存放路徑的級數和名稱字符數。此設置只能在 http 段中定義。
如:
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;
proxy_cache_valid [code ...] time 指定不同響應碼的內容的緩存時間
如:
proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_valid any 1m;
proxy_cache_method METHOD 定義哪些方法的請求結果可以被緩存,如:
新聞熱點
疑難解答