Nginx的代理配置(六)
一、正向代理
1. 指令說明
(1) resolver
這個用於設置DNS服務器的ip 。DNS服務器的主要工作是進行域名解析,將域名映射為對應IP地址。
語法:resolver address ... [valid = time ]
address DNS 服務器的ip地址, 不指定的話默認53
time 設置數據包在網絡中的有效時間.
例: resolver 127.0.0.1 [::1]:52113 valids
resolver_timeout
設置DNS服務器域名解析超時時間
語法: resolver_timeout time;
proxy_pass
設置代理服務器的協議和地址。
語法:proxy_pass URL
URL 為設置的代理服務器協議和地址
2. 正向代理配置示例
server { resolver 114.114.114.114; #指定DNS服務器IP地址 listen 80; location / { proxy_pass http://$host$request_uri; #設定代理服務器的協議和地址 proxy_set_header HOST $host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } server { resolver 114.114.114.114; #指定DNS服務器IP地址 listen 443; location / { proxy_pass https://$host$request_uri; #設定代理服務器的協議和地址 proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } }
二、反向代理
1. 指令說明
基本指令:
(1) proxy_pass
設置代理服務器的協議和地址。
語法:proxy_pass URL
(2) proxy_hide_header
用於設置Nginx服務器發送http相應時,隱藏一些頭域信息。
語法:proxy_hide_header field;
field 為需要隱藏的頭域. 可以用於 http server localtion。
(3) proxy_pass_header
默認Nginx 服務器在發送響應報文時,報文不包含 date server X-accel 等來自被代理服務器的頭域信息,該指令可以設置這些頭域信息已被發送。
語法:proxy_pass_header filed;
(4) proxy_pass_request_body
配置是否將客戶端請求體發送給代理服務器。
語法:proxy_pass_request_body on | off
可以用於 http server localtion。
(5) proxy_pass_request_header
配置是否將客戶端的請求頭發送給代理服務器。
(6) proxy_set_header
用於更改Nginx服務器接收到的客戶端請求的請求頭,然后將新的請求頭發送給被代理服務器。
語法:proxy_set_header filed value
field 要更改的信息所在的頭域
value 更改的值
(7) proxy_set_body
更改Nginx服務器接收到的客戶端請求的請求體信息,然后將新的請求體發送給被代理的服務器。
語法:proxy_set_body value
value 為更改的信息
(8) proxy_bind
強制將與代理主機的連接綁定到指定的ip主機。
語法:proxy_bind address
address 為IP地址
(9) proxy_connect_timout
用於配置Nginx服務器與后端被代理服務器嘗試連接的超時時間。
語法:proxy_connect_timout time
默認時間時60秒
(10) proxy_read_timeout
用於配置Nginx服務器向后端被代理服務器(組)發出read請求后,等待響應的超時時間。
語法:proxy_read_timeout time;
默認時間時60秒
(11) proxy_send_timeout
用於配置Nginx服務器向后端被代理服務器(組)發出write請求后,等待響應的超時時間。
語法:proxy_send_timeout time;
默認時間時60秒
(12) proxy_http_version
用於設置Nginx服務器提供代理服務器的HTTP協議版本。
proxy_http_version 1.0
可選值有1.0、1.1、2.0,默認是1.0
(13) proxy_method
用於設置Nginx服務器請求代理服務器使用的請求方法,設置了這個客戶端的請求方法將會被忽略
語法:proxy_method method
method 設置 POST | GET
(14) proxy_ignore_client_abort
用於設置在客戶端中斷網絡請求的時候,Nginx服務器是否中斷對被代理服務器的請求。
語法:proxy_ignore_client_abort on | off
(15) proxy_ignore_headers
用於設置一些HTTP相應頭的頭域。
語法:proxy_ignore_headers filed ...
filed 為要設置的HTTP相應頭的頭域信息,例如"X-Accel-Redirect" "X-Accel-Expires" "Expores " "Cache-Control " "Set-Cookie"
(16) proxy_headers_hash_max_size
存放HTTP報文頭的哈希表的容量。
語法:proxy_headers_hash_max_size size;
默認大小512
(17) proxy_headers_hash_bucket_size
Nginx服務器申請存放HTTP報文頭的哈希表容量的單位大小。
語法:proxy_headers_hash_max_size 64;
(18) proxy_next_upstream
如果Nginx定義了 upstream 后端服務器組,如果組內有異常情況,將請求順次交給下一個組內服務器處理。
語法:proxy_next_upstream status..
status: error,timeout,invalid_header,http_500 502 503 504 404,off
(19) proxy_ssl_session_reuse
該指令用於配置是否使用基於SSL安全協議的會話連接(htts://)被代理服務器。
語法:proxy_ssl_session_reuse on | off;
默認on
Proxy Buffer 指令
(20) proxy_buffering
用於配置是否啟用或者關閉proxybuff。
語法:proxy_buffering on | off
(21) proxy_buffers
用於配置接收一次被代理服務器響應數據的Proxy Buffer個數和每個Buffer的大小。
語法:proxy_buffers number size;
size一般設置為內存頁大小。根據平台的不同,取值可能為4KB或者8KB
proxy_buffers 8 4KB|8KB;
(22) proxy_buffer_size
用於配置從被代理服務器獲取的第一部分響應數據的大小,默認為4k或者8k,保持與proxy_buffers指令中的size變量相同。
(23) proxy_busy_buffers_size
用於限制同時處於BUSY狀態的Proxy Buffer的總大小。
語法:proxy_busy_buffers_size size;
size為設置處於BUSY狀態的緩存區總大小。默認為8KB或者16KB。
(24) proxy_temp_path
用於配置磁盤上的一個文件路徑,用於臨時存放被代理服務器的大體積響應數據。如果Proxy Buffer被裝滿后,響應數據仍然沒有被Nginx服務器完全接收,之后響應的數據就會被臨時存放在該文件中。語法結構為:
語法:proxy_temp_path path [level1 [level2 [level3]]]
path 磁盤上臨時存放文件的路徑
levelN 緩存文件存放在設置的路徑的第幾級hash目錄中
(25) proxy_max_temp_file_size
用於設置所有臨時文件的總大小。
語法:proxy_max_temp_file_size size;
默認是1024M;
(26) proxy_temp_file_write_size
用於配置同時寫入臨時文件的數據量的總大小。
語法:proxy_temp_file_write_size size;
默認設置根據平台的不同,可以為8KB或者16KB,一般與平台的內存也大小相同。
Proxy Cache指令
(27) proxy_cache
用於配置一塊公用的內存區域的名稱,該區域可以存放緩存的索引數據.這些數據在Nginx服務器啟動時由緩存索引重建進程負責建立,在Nginx服務器的整個運行過程中由緩存管理進程負責定時檢查過期數據、檢索等管理工作.語法結構為:
語法:proxy_cache zone | off;
zone 設置用於存放緩存索引的內存區域的名稱
off 關閉proxy_cache功能,默認設置
(28) proxy_cache_bypass
用於配置Nginx在響應客戶端時不從緩存中獲取數據的條件。語法結構為:
語法: proxy_cache_bypass string ...;
其中,string為條件變量,支持配置多個,當至少有一個字符串指令不為空或者不等於0時,響應數據不從緩存中獲取。
舉例:proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment $http_pragma $http_authorization;
(29) proxy_cache_key
用於配置Nginx服務器在內存中為緩存數據建立索引時使用的關鍵字。
(30) proxy_cache_lock_timeout
用於配置開啟鎖功能以后鎖的超時時間,默認為5s。
(31) proxy_cache_in_uses
當客戶端向被代理的服務器發送相同的請求達到該指令設定的次數后,Nginx服務器才對該其更年期的響應數據做緩存,默認為1。
(32) proxy_cache_path
用於設置Nginx服務器存儲緩存數據的路徑以及和緩存索引相關的內容,語法結構為:
語法:proxy_cache_path path [levels=levels] keys_zone=name:size1 [inactive=time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threshold=time3];
path 設置緩存存放的根路徑
levels 設置相對於path指定目錄的第幾級hash目錄中緩存數據.levels=1,表示一級hash目錄;levels=1:2,表示兩極目錄,以此類推.該目錄是基於請求URL通過哈希算法得到的.
name:size1 Nginx服務器的緩存索引重建進程在內存中為緩存數據建立索引,這一對變量用來設置存放緩存索引的內存區域的名稱和大小.
time1 設置強制更新緩存數據的時間,當緩存數據在設定的時間內沒有被訪問時,Nginx服務器就強制從硬盤上將其刪除,下次客戶端訪問該數據時重新緩存.默認為10s.
size2 設置緩存數據大小.當緩存的大小超過該變量的設置時,索引管理進程將根據最近最少被訪問的策略刪除緩存.
number 設置緩存索引重建進程每次加載的數據元素的數量上限.默認為100
time2 設置緩存索引重建進程在一次遍歷結束后下一次遍歷開始之間暫停的時長,默認為50ms.
time3 設置遍歷一次磁盤緩存源數據的時間上限.默認為200ms.
指令比較復雜,一般需要設置前面3個指令的情形比較多,后面幾個變量與Nginx服務器緩存索引重建進程以及管理進程性能有關,一般情況下保持默認設置就可以了。
proxy_cache_path /data/nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_path /data/nginx/cache/b levels=2:2 keys_zone=b:100m;
proxy_cache_path /data/nginx/cache/c levels=1:1:2 keys_zone=c:1000m;
注:該指令只能放在http塊中。
(33) proxy_cache_use_stale
指定在哪種情況下,當被代理的服務器無法訪問或者訪問錯誤等現象時,Nginx服務器可以使用歷史緩存響應客戶端的請求。
語法:proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | off ...;
默認為off。
(34) proxy_cache_valid
該指令可以針對不能的HTTP響應狀態設置不同的緩存時間。
語法:proxy_cache_valid [code ...] time;
code 設置HTTP響應的狀態碼,可選,默認只為響應嗎是200 301 302的響應數據做緩存.可以使用 ‘any’ 表示緩存所有該指令中未設定的其他響應數據
time 緩存時間
舉例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 10m; # 第三個例子表示對返回狀態為不是200 301 302的響應數據緩存10分鍾.
(35) proxy_no_cache
配置在什么情況下不使用cache功能。
語法:proxy_no_cache string ...;
其中,string可以是一個或者多個變量,當string的值不為空或者不為’0’時,不啟用cache功能。
(36) proxy_store
配置是否在本地磁盤緩存來自被代理服務器的響應數據。
語法:proxy_store on | off | string;
on | off 設置是否開啟Proxy Store功能.如果開啟,緩存文件會存放到alias指令或root指令設置的本地路徑.默認為off
string 自定義緩存文件存放路徑.使用該配置時,默認開啟Proxy Store。
(37) proxy_store_access
用於設置用戶或用戶組對Proxy Store緩存文件的訪問權限。
語法:proxy_store_access users:permissions ...;
users 可以設置為user、group或者all
permission 設置方位權限
舉例:
proxy_store on;
proxy_store_access user:rw group:rw all:r;
root /data/www;
2. 反向代理配置示例
upstream test { server 192.168.10.20; } server { listen 80; server_name 192.168.10.20; index index.html index.htm; location / { proxy_pass http://test; } }