ngx_http_proxy_module

ngx_http_proxy_module

1.proxy_pass

Syntax:

proxy_pass URL;

Context:

location, if in
location, limit_except

這條指令將來是用的相當多的指令。

v  附加1proxy_pass后面的路徑不帶uri時,其會將locationuri傳遞給后端主機;

       location  /uri/{

              proxy_pass  http://HOST;

              ##
proxy_pass  http://HOST[:port];
這樣可以指定轉發到的端口了

## HOST后面一定不能帶/,如果帶上了,就是下面這種情況了。

       }

http://HOSTNAME/uri à http://host/uri

v  替換1roxy_pass后面路徑是一個uri時,其會將客戶請求的locationuri替換為proxy_pass后端主機的uri;

       location  /uri/{

              proxy_pass  http://HOST/new_uri/;

       }

Http://HOSTNAME/uri/ à http://HOST/new_uri

v  附加2:如果location定義其uri時使用了正則表達模式匹配機制,則proxy_pass后的路徑必須不能使用uri;用戶請求時傳遞的uri將直接附近代理的到的服務的之后。

location~|~*  PATTERN {

       proxy_pass  http://HOST;

## 這里也不能夠在HOST后面加”/”,不但不能帶,帶了會報錯

}

       http://www.magedu.com/bbs/  –>http://172.16.100.7/bbs/

       http://www.magedu.com/bbs/  –>http://172.16.100.7/

                                         

ngx_http_proxy_module

這兩個服務器可以在同一個局域網,也可以不在。

實戰: proxy_pass

2.proxy_set_header

Syntax:

proxy_set_header field value;

Default:

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

Context:

httpserverlocation

 

重新定義或者是擴展(有可能會刪除)向后端主機發送的請求報文的首部(field)及其值(value);“value”可以為text, variables,也可以為他們的組合。

 

如果客戶端發來的請求報文中,包含Host首部和Connection首部,代理服務器發送給后端服務器的報文中,默認包含如下兩項:

proxy_set_header Host       $proxy_host;

proxy_set_header Connection close;

但是,如果客戶端請求報文中不包含Host首部,上面的寫法就會出現問題(不應該傳遞本機的host給后端主機了)。所以這里最好像下面這么寫,因為$host和客戶端發來的請求報文中的Host首部相同。(類似于x-Forwarded-For的信息。Nginx在收到報文時,如果包含Host首部,就將收到的報文中的Host首部保存到變量$host中)。

proxy_set_header Host       $host;

也可以將使用的后端服務器的端口寫在這里:

proxy_set_header Host       $host:$proxy_port;

 

如果開啟了緩存的功能,Nginx將在給后端服務器發送報文時,不發送收到報文中的如下首部:

If-Modified-Since

If-Unmodified-Since

If-None-Match

If-Match

Range

If-Range

示例:Proxy_set_header

3.proxy_cache_path

Syntax:

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time]
[max_size=size]
[manager_files=number]
[manager_sleep=time] [manager_threshold=time] [loader_files=number]
[loader_sleep=time] [loader_threshold=time]

Context

http

定義Nginx緩存的路徑及其他變量。

v  path”這個路徑是用哈希指令proxy_cache_key提供的值,來確定的。

v  level”定義緩存的存儲目錄的級別,變化范圍:1~3,每一級緩存的值為12(使用哈希值的一位或者是兩位作為該級目錄的目錄名。)。

v  “use_tmp_path=on|off”

0.8.9版本開始,臨時文件和緩存可以放在不同的文件系統上。但是注意,如果放在不同的文件系統,文件需要在兩個文件系統間拷貝,而不是簡單的重命名。因此建議緩存和臨時文件放在同一個文件系統上。如果這個值為on(默認),指令proxy_temp_path所設置的目錄有效,若為off,則proxy_temp_path為無效

v  “keys-zone=name:size”

所有活動的keys以及數據信息(元數據)都儲存在一個共享的存儲區域中。1M的存儲區域可以存儲8kkeys

u  注意:每個定義的ZONE都需要有唯一的路徑,比如:

proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m;

proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m;

u  ZONE必須根據頁面的多少來設置合適的大小.一個頁面(文件)的元數據大小取決于操作系統,當前 FreeBSD/i386 64 bytes, FreeBSD/amd64128 bytes ZONE滿了以后,key將按照LRU算法來替換

v  “inactive=time”:

默認為10minutes,在這段時間內沒有被訪問過的緩存,將會被從緩存空間中清除。

v  About “cache manager”:

“cache manager” 進程監控磁盤緩存的大小,該最大值在”max_size” 參數中定義。 當超出大小后最少使用的數據將被刪除。數據的刪除是在由”manager_files””manager_threshold”、”manager_sleep”參數所定義的循環中刪除的。

u  “manager_files”:每次刪除循環中最多能夠刪除的條數。默認為100

u  “manager_threshold”:每個刪除循環所使用的時長限制。默認為200milliseconds

u  “manager_sleep”:每兩個刪除循環之間的暫停時間。默認為50milliseconds

v  About ”cache loader”:在Nginx啟動后一分鐘,”cache
loader”
進程就會被激活。該進程從存儲在文件系統這的當前的緩存加載到緩存區域。這個操作也是在循環中進行的。類似”cache manager”,它也有如下參數:

u  “loader_files”: 每次加載循環中最多能夠加載的條數。默認為100

u  “loader_threshold”: 每個加載循環所使用的時長限制。默認為200milliseconds

u  “loader_sleep”: 每兩個加載循環之間的暫停時間。默認為50milliseconds

v  purger、purger_filespurger_sleep、purger_threshold:這幾個參數在付費版中,才能夠用到。

4.proxy_cache

Syntax:

proxy_cache zone | off;

Default:

proxy_cache off;

Context:

httpserverlocation

 

指明要調用的緩存,或關閉緩存機制。

v  在調用時,僅僅指定這個是不夠的,還要指定:key。

v  如果proxy_buffers 設為off,將無法使用proxy_cache

5.proxy_cache_key

Syntax:

proxy_cache_key string;

Default:

proxy_cache_key
$scheme$proxy_host$request_uri;

Context:

httpserverlocation

緩存中用“鍵”的內容,定義緩存鍵(如果給定必須顯示給定,);

proxy_cache_key  $request_uri

proxy_cache_key  $scheme$proxy_host$request_uri

v  如果不打算區分協議(httphttpd),可以只是用$request_uri

也可以分瀏覽器進行緩存:

proxy_cache_key “$host$request_uri
$cookie_user”;

v  為保證私人信息不會無意中被緩存并發給所有用戶,后端服務器可以設置 “no-cache” 或者 “max-age=0”,或者proxy_cache_key中必須包含用戶識別信息(比如$cookie_xxx).但是,proxy_cache_key中使用cookie會降低公共緩存對象的命中率,所以不同的location使用不同的 proxy_cache_key,在區分私人和公共緩存對象時是必要的

6.proxy_cache_valid

Syntax:

proxy_cache_valid [code …] time;

Context:

httpserverlocation

 

為不同的響應碼設定其緩存的時長;示例如下:

proxy_cache_valid  200 302 10m;

proxy_cache_valid  301 1h;

proxy_cache_valid  any 1m;

Note: you must set this option for any
persistent caching to occur.

7.proxy_cache_use_stale

Syntax:

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 |http_503 | http_504 | http_403 | http_404 | off …;

Default:

proxy_cache_use_stale off;

Context:

httpserverlocation

 

Determines in which cases a stale cached
response can be used when an error occurs during communication with the proxied
server.

 

后端服務器故障,后端的服務器故障為哪幾種情況時,緩存服務器可以響應給客戶端。

(就是還是要訪問后端服務器的。)

這里應該有一些代理時時長的定義。比如:

8.buffering buffers

相關的指令有:

proxy_bind、proxy_buffer_sizeproxy_buffering、proxy_buffersproxy_busy_buffers_size

9.proxy_cache_methods

Syntax:

proxy_cache_methods GET | HEAD | POST …;

Default:

proxy_cache_methods GET HEAD;

Context:

httpserverlocation

為哪幾種方法(報文請求方法)提供緩存功能,建議只是用gethead(默認也是這個),所以一般不需要特別指定。

10.proxy_hide_header

Syntax:

proxy_hide_header field;

Context:

httpserverlocation

響應的包中,首部中的信息需要隱藏。

默認,nginx也不會給部分headers的(包括:”Date”、”Server”、”X-Pad””X-Accel-…”),如果要隱藏更多的,就用這個命令來指定。

proxy_pass_header定義了允許代理服務器發送給客戶端的首部。

平時nginx也可以通過在響應報文中,再添加一個header。

11.proxy_connect_timeout

Syntax:

proxy_connect_timeout time;

Default:

proxy_connect_timeout 60s;

Context:

httpserverlocation

該參數定義了跟代理服務器連接的超時時間,必須留意這個time out時間不能超過75.

12.proxy_read_timeout time;

等待后端主機發送響應報文的超時時長,默認為60s

13.proxy_send_timeout time;

       向后端服務發送請求報文的超時時長,默認為60s;

原創文章,作者:m20-吳清玲,如若轉載,請注明出處:http://www.www58058.com/56078

(1)
m20-吳清玲m20-吳清玲
上一篇 2016-10-30 16:10
下一篇 2016-10-30 16:34

相關推薦

  • 文件處理工具

    Linux的哲學思想之一是一切皆文件,所有系統中有許多文本文件。因此Linux有許多關于文本處理的命令。 cat命令 連接文件并打印到標準輸出設備上,cat經常用來顯示文件內容。 語法 cat [OPTION]… [FILE]… 常用選項 -A, –show-all #顯示所有控制符 -b, –num…

    Linux干貨 2016-08-08
  • YUM工具的工作原理、用法及源 碼包的編譯安裝

    YUM工具的工作原理,用法及源碼包的編譯安裝 _ueditor_page_break_tag_ 一、 CentOS: yum, dnf       1.YUM: (Yellow dogUpdate Modifier),rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具   …

    Linux干貨 2016-09-01
  • 第一周作業-03

    ifconfig命令:查看及臨時修改網卡配置信息    查看的用法:ifconfig [-v] [-a] [-s] [INTERFACE]        OPTIONS            -v:詳細顯示接口報錯信息   &nb…

    Linux干貨 2016-09-19
  • PHP5.4的變化關注—What has changed in PHP 5.4.x

    What has changed in PHP 5.4.x Most improvements in PHP 5.4.x have no impact on existing code. There are a few incompatibilities and new features that should be …

    Linux干貨 2015-06-17
  • CentOS 7上配置php-fpm

    CentOS 7上配置php-fpm:              httpd-2.4:rpm包默認編譯支持了fcgi模塊;              php-fpm包:專用于將php運行于fpm模式;   &n…

    2017-06-06
欧美性久久久久