1. 程式人生 > 實用技巧 >Nginx的代理配置(六)

Nginx的代理配置(六)

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_size64;

(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;
	}
}