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_files、purger_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_size、proxy_buffering、proxy_buffers、proxy_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
下一篇 2016-10-30

相關推薦

  • Linux發行版概述

    Linux發行版概述 Linux發行版有數百種之多,最主流的三個分支為Debain、Slackware、RedHat Debain Debain是三大主流發行版中唯一由社區維護的版本,無商業版本,相對較為輕巧,對使用者的技術要求較高 * Ubuntu、Knopix為Debian的主要子分支,其中Knopix是以安全著稱的 Slackware(SUSE) SU…

    Linux干貨 2017-07-02
  • MySQL雙主復制模型

    配置雙主數據庫實例 雙方可以相互復制 為了不影響效果,兩臺虛擬機把剛才生成的數據文件都刪除 rm -rf /var/lib/mysql/* 1、時間要同步 2、雙方既要啟動中繼日志,也需要啟動二進制日志 3、編寫主的配置文件 雙主復制時有一個最大的問題,自動增長字段會重疊。為了避免重疊,一個節點使用奇數,另一個節點使用偶數 這里表示的意思,從1增長,一次增長…

    Linux干貨 2016-11-21
  • 初識Linux-即使是997也不能停止學習

    1.計算機的組成及其功能:    從1946年第一臺通用計算機ENIAC誕生至今,幾乎所有的計算機系統都是建立在馮諾依曼體系結構上的。那么何為馮諾依曼體系結構? 馮諾依曼體系結構:        控制器:是整個計算機的中樞,負責計算機的整體調度工作,將指令從存儲器中取出,并對指令進行解釋執行。 &n…

    Linux干貨 2016-10-29
  • 第一周:Linux基礎之常用命令(二)

    一、Linux的命令使用格式 命令的語法通用格式: ~]# COMMAND  OPTIONS  ARGUMENTS   命令  選項  參數 1.  COMMAND,命令:發起命令時將請求內核將某個二進制程序運行為一個進程,命令本身是一個可執行的程序文件,二進制格式的文件有可能會調用共享庫文件。 多…

    Linux干貨 2016-09-18
  • 淺述sed命令

    1、sed工作原理       sed(stream editor)是一種流編輯器,本身也是一個管道命令,可以分析編輯標準輸入(standard input),包括對數據進行替換、刪除、新增、選取特定行等等。運行時以行為單位,每次只處理一行的內容,因此它又被稱為行編輯器。sed還可與正則表達式配合使用,從而簡…

    Linux干貨 2016-08-10
  • 【N25第三周作業】用戶及權限管理

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     pts/0        2016-12-14&nb…

    Linux干貨 2016-12-14
欧美性久久久久