Nginxhttp模組(學習筆記二十一)

sktj發表於2018-05-17

1.HTTP的核心模組.

這些HTTP模組會在編譯Nginx時自動編譯進來,除非使用configure命令禁止編譯這些模組.

(1)alias指令.

該指令用於在URL和檔案系統路徑之間實現對映.它與root指令類似,但是網頁檔案的root根目錄不會改變,改變的只是請求URL的檔案系統路徑.

語法:alias file-path| directory-path ;

例: location /i/{alias /spool/w3/images/;}

在示例中,訪問URL地址”/i/top.gif”,會返回檔案”/spool/w3/images/top.gif”

(2)client_body_in_file_only 指令.

語法:client_body_in_file_only on|off

該指令允許將一個客戶端的請求內容記錄到一個檔案中,該檔案在請求完成後不會被刪除.在內建perl中,該指令可以用於除錯$r->request_body_file 方法.

(3)client_body_in_single_buffer 指令

語法:client_body_in_single_buffer

該指令指定是否保持整個內容在一個單一的客戶端請求緩衝區中,該指令在使用變數$request_body時被推薦使用.

(4)client_body_buffer_size指令

語法:client_body_buffer_size the_size

例 client_body_buffer_size 128k

該指令指定客戶端請求內容的緩衝區大小.如果客戶端請求內容大於緩衝區,整個請求內容或部分請求內容將被寫人臨時檔案.緩衝區預設大小相當於網頁大小的兩倍,為8k 或16k.

(5)client_body_temp_path指令

語法: client_body_temp_path dir-path [level1[level2[level3]

該指令用於指定存放請求內容臨時檔案的目錄.快取目錄最多支援3層子目錄.

例: client_body_temp_path /spool/nginx/client_temp 1 2 ;

以上示例的目錄結構類似:

/spool/nginx/client_temp/7/45/XXXXX

(6)client_body_timeout指令

語法:client_body_timeout time

該指令用於設定讀取客戶端請求內容的超時時間.如果超過該指令設定的時間,Nginx將返回”Request time out”錯誤資訊(HTTP狀態碼為408)

(7)client_header_buffer_size指令

語法:client_header_buffer_size size

該指令用於設定客戶端請求的Header頭緩衝區大小.對絕大多數請求來說,1KB大小的Header頭緩衝區已經足夠,但是對於Cookie內容較大的請求來說,可能不夠用.

(8)client_header_timeout指令.

語法:client_header_timeout time

該指令用於設定讀取客戶端請求Header頭資訊的超時時間,如果超過該指令設定的時間,Nginx將返回”Request time out “錯誤資訊(HTTP狀態碼為408)

(9)client_max_body_size指令

語法:client_max_body_size size

例: client_max_body_size 300m

該指令用於設定允許接受的客戶端請求內容的最大值,即客戶端請求Header頭資訊中設定的Content-Length的最大值.如果超過該指令設定的最大值.Nginx將返回”Request Entity Too Large”錯誤資訊(HTTP狀態碼為413).當預設值為1MB時,如果Nginx伺服器提供上傳1MB以上的大檔案等操作,則要加大該值.

(10)default_type指令

語法:default_type MIME-type

MIME-type是用來告訴瀏覽器請求的檔案媒體型別,例如:MIME-type名text/plain表示該檔案為文字檔案,text/html表示該檔案為HTML網頁檔案.如果Nginx無法識別該檔案屬於何種MIME-type型別,則該檔案標記為default_type指令設定的MIME-type

(11)error_page code[code…][=|=answer-code] uri

該指令用於設定如果出現指定的HTTP錯誤狀態碼,則返回給客戶端顯示的對應的URI地址.

例: error_page 404 /404.html ;

(12)index指令

語法: index file [file…]

該指令用於設定Nginx的預設首頁檔案.

index index.$geo.html index.0.html /index.html

(13)internal指令

該指令用於設定某個location路徑只能在Nginx內部使用,外部無法訪問.

location /404.html {internal;}

(14)keepalive_timeout [time]指令

該指令可使客戶端到伺服器端的連線持續有效,當出現對伺服器的後繼請求時,keep-alive功能可避免建立或重新建立連線.市場上大部分Web伺服器,包括IIS,Apache,Nginx,Lighttpd都支援HTTP keep-alive.對於提供靜態內容的網站來說,這個功能有用,對於負擔重的網站,就比較吃力了.

(15)keepalive_requests指令

語法:keepalive_requests n

設定一個keep-alive連線使用的次數.一次請求結束後,如果該連線使用的次數沒有超過keepalive_requests指令設定的請求次數,則伺服器並不立即主動斷開連線,而是直到達到keepalive_timeout指令設定的時間,才關閉連線.

(16)large_client_header_buffers 指令

該指令用於設定客戶端請求的Header頭緩衝區大小,預設值為4KB.客戶端請求行不能超過large_client_header_buffers指令設定的值.客戶端請求的Header頭資訊不能大於large_client_header_buffers指令設定的緩衝區大小,否則會報414或400錯誤,如果客戶端的Cookie資訊較大,則須增加緩衝區大小.

(17)limit_except

該指令用於限制HTTP方法訪問location中的內容

例: limit_except GET{

  allow 192.168.1.0/32 ;

  deny all ;

}

(18)limit_rate 指令

語法:limit_rate speed

該指令主要用來限速,限速單位是”位元組數/秒”,一般在提供HTTP下載等應用中會用到該指令.限速只對一個連線起效,如果客戶端開啟兩個連線下載,下載的速度將是限速值的兩倍

例1:限制每個連線的下載速度為100KB/秒

limit_rate 100k ;

例2:在特定條件下開啟限速功能

server {

  if($slow)

  {

    set $limit_rate 4k ;

  }

}

(19)limit_rate_after指令

語法:limit_rate_after time

該指令可以設定一個位元組數(1MB),下載的位元組數大於該值後,limit_rate指令的限速功能將起效.對於MP3線上播放,HTTP方式的Flash FLV視訊點播等應用,使用該指令將會起到不錯的效果.

例:下載的檔案位元組數超過1MB後,限速為100kb/秒

limit_rate_after 1m ;

limit_rate 100k ;

(20)listen指令

該指令用於設定虛擬主機監聽的伺服器地址和埠號,你可以同時設定伺服器地址和埠號,也可以指定一個IP地址,或者一個埠號,或者一個伺服器名.如果listen指令只設定一個伺服器名或IP地址,那麼它的預設埠號為80.

(21)location指令

該指令對不同的URI進行不同的配置,既可以使用字串,也可以使用正規表示式,使用正規表示式,須使用以下字首.

1)~*,表示不區分大小寫的匹配.

2)~,表示區分大小寫的匹配.

(22)log_not_found指令

語法:log_not_found [on|off]

該指令用來啟用或禁用404錯誤日誌,這個指令可以用來禁止Nginx記錄找不到robots.txt和favicon.ico這類檔案的錯誤資訊.

(23)log_subrequest指令

語法:log_subrequest [on|off]

該指令用來啟動或禁止access_log中記錄類似rewrite rules , SSI request等子請求.

(24)root指令

該指令主要用於指定請求的文件根目錄.例如,配置內容為location/i/{root /spool/w3;}時,請求URI地址”/i/top.gif”將返回檔案”/spool/w3/i/top.gif”的內容給客戶端.

2.HTTP核心模組中可以使用的變數.

NginxHTTP核心模組支援一些與Apache變數名稱相同的內建變數,例如:$http_user_agent,$http_cookie ,此外還支援一些Nginx特有的其他變數.

$arg_PARAMETER:該變數包含了當查詢字串時,GET請求可變引數的值.

$args:這個變數等於請求行中的引數.

$binary_remote_addr:二進位制格式的客戶端地址.

$content_length:這個變數等於客戶端請求頭中的content-length值.

$content_type:這個變數等於客戶端請求頭中的content-type值.

$cookie_COOKIE:客戶端請求Header頭中的cookie變數.字首”$cookie_”加上cookie名稱的變數,該變數的值即為cookie名稱的值.

$document_root:這個變數等於當前請求所屬的root指令設定的文件根目錄路徑.

$limist_rate:這個變數允許限制連線速率.

$remote_addr:客戶端的IP地址.

$remote_port:客戶端的埠.

3.HTTP Access模組

HTTP Access模組提供了一個簡單的基於host名稱的訪問控制.通過該模組,可以允許或禁止指定的IP地址或IP段訪問某些虛擬主機或目錄.

例:

location /{

  deny 192.168.1.1 ;

  allow 192.168.1.0/24;

  allow 10.1.1.0/16 ;

  deny all ;

}

4.HTTP Auth Basic模組

該模組採用基於HTTP基本身份驗證的使用者名稱和密碼登入方式,來保護你的虛擬主機或目錄location /{

  auth_basic “Restricted”;

  auth_basic_user_file htpasswd ;

}

auth_basic:用於指定彈出的使用者名稱和密碼登入框中提示的名稱.

auth_basic_user_file指令:用於設定htpasswd密碼檔案的名稱.

5.HTTP Browser模組

該模組可以根據客戶端”User-agent”請求頭中的資訊建立變數.

$modern_browser:如果瀏覽器被識別為新瀏覽器,則等於modern_browser_value指令設定的值.

$ancient_browser:如果瀏覽器被識別為舊瀏覽器,則等於ancient_browser_value指令設定的值.

$msie:如果瀏覽器被鑑定為MSIE瀏覽器,該變數的值為1.

6.HTTP Charset模組

該模組用來新增文字編碼型別到HTTP應答頭”Content-Type indicated”.此外,該模組還能夠將伺服器端網頁原來的文字編碼轉換成另一種文字編碼,輸出給客戶端.

例如:

charset windows-1251

source_charset koi8-r

charset指令用於新增文字編碼型別到HTTP應答頭”Content-Type indicated” .如果編碼與source_charset指令設定的編碼不一樣,將進行重編碼.引數為”off”.

override_charset on|off

當該指令開啟時,如果後端的FASTCGI伺服器響應頭帶有”Content-Type”頭資訊,將開啟編碼轉換.

7.HTTP Empty Gif模組

該指令可以保持一個1X1畫素的透明GIF圖片在記憶體中,當請求該圖片時,能夠得到非常快得響應速度.

例:location = /_.gif{ empty_gif;}

8.geo模組

geo模組主要用於做全域性負載均衡,可以根據不同的客戶端IP訪問到不同的伺服器.一些針對不同地區的客戶,使用不同的伺服器去處理的需求,可以使用geo模組.

配置如下:

geo $geo{

  default 0 ;

  include conf/geo.conf ;

  127.0.0.1/32 2 ;

  127.0.0.0/24 ru ;

  192.168.1.0/24 1 ;

  10.1.0.0/16  1 ;

}

defalut:任何IP地址,相當於0.0.0.0/0

include:可以引用一個文字檔案,裡面包含geo的配置內容.

9.Gzip模組

Gzip模組主要用於對返回給客戶端的網友採用gzip進行壓縮輸出.

目前90%的瀏覽器都支援gzip和deflate兩種壓縮格式.如果瀏覽器支援gzip壓縮,就會在HTTP請求頭中傳送一行”Accept-Encoding:gzip,deflate”,這時候Nginx伺服器可以輸出經過gzip壓縮後的頁面給瀏覽器,瀏覽器再解壓.這種方式可以將網路線路上傳輸的大量資料消減60%以上,不僅節省了伺服器頻寬,同時加速了使用者的下載速度和體驗.

(1)gzip指令.

gzip on|off 該指令用於開啟或關閉gzip模組

(2)gzip_buffers指令

gzip_buffers 4 4k/8k

設定系統獲取幾個單位的快取用於儲存gzip的壓縮結果資料流,例如4 4k代表以4k為單位,按照原始資料大小以4k為單位的4倍申請記憶體.如果沒有設定,預設值是申請跟原始資料相同大小的記憶體空間去儲存gzip壓縮結果.

(3)gzip_comp_level指令

gzip 壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

(4)gzip_min_length指令

gzip_min_length length

設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length 中進行獲取,預設值是0,不管頁面多大都壓縮,建議設定成大於1k的位元組數,小於1k可能會越壓越大.

(5)gzip_http_version指令

gzip_http_version 1.0|1.1

識別http的協議版本.由於早期的一些瀏覽器或http客戶端,可能不支援gzip自解壓,使用者會看到亂碼,所以做一些判斷還是很有必要的.

(6)gzip_proxied指令

Nginx作為反向代理的時候啟用,開啟或關閉後端伺服器返回的結果,匹配的前提是後端伺服器必須要返回包含Via的header頭.

(7)gzip_types指令

語法:gzip_types mime-type[mime-type…]

匹配mime型別進行壓縮,(無論是否指定)”text/html”型別總是會被壓縮的.

10.HTTP Headers模組

這組指令主要用來設定Nginx返回網頁內容給使用者時,附件的Header頭資訊.

(1)add_header指令

當HTTP應答狀態碼為200,204,301,302,或304時,增加指定的Header頭,其中Header頭的值可以使用變數.

(2)expires指令

使用本指令可以控制HTTP應答中的”Expires”和”Cache-Control”的Header頭資訊,起到控制瀏覽器頁面快取的作用.

語法:expires [time|epoch|max|off]

11.HTTP Index模組

該模組可以用於指定虛擬主機目錄下的預設首頁檔名稱.如果指定了多個檔案,那麼將按照從左到右的順序逐個查詢.可以在列表末尾加上一個絕對路徑名的檔案.

12.HTTP Referer模組

當瀏覽器向Web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器藉此可以獲得一些資訊用於處理,例如防盜鏈.因為HTTP Referer頭資訊是可以通過程式來偽裝生成的.所以通過Referer防盜鏈並非100%可靠.

13.HTTP Limit Zone模組

該模組用於針對條件,進行會話的併發連線數控制,例如限制每個IP的併發連線數.

limit_zone one $binary_remote_addr 10m ;

在以上示例中,定義一個叫”one”的記錄區,總容量為10MB,以容量$binary_remote_addr作為會話的判斷基準(即一個地址一個會話)

語法: limit_conn zone_name max_clients_per_ip

該指令用於指定一個會話最大的併發連線數.當超過指定的最大併發連線數時,伺服器將返回503.

14.HTTP Limit Req模組

該模組允許你對Session會話,單個客戶端IP地址,限制指定單位時間內的併發請求數.你可以在一定程度上減輕多應用伺服器的DOS惡意攻擊.

15.HTTP Log模組

(1)access_log指令.該指令用於設定日誌檔案的路徑,格式和緩衝區大小.使用”off”作為唯一引數,將不記錄日誌檔案.如果沒有指定日誌格式,將預設採用”combined”格式.緩衝區的大小必須小於寫人磁碟檔案的原子記錄大小.

(2)log_format指令.該指令用來描述日誌格式.在日誌的格式中,可以使用Nginx的大多數通用變數,以及一些僅在寫日誌時存在的變數.

16.HTTP Map 模組

該模組允許分類,或者對映一組值到一組不同的值,並將這些值儲存在一個變數中.

例:

map $http_host $name{

  hostnames ;

  default 0 ;

  example.com 1 ;

  *.example.com 1 ;

  test.com 2 ;

  *.test.com 2 ;

  .site.com 3 ;

}

17.HTTP Memcached模組

Memcached是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載.它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提供動態,資料庫驅動網站的速度.Memcached基於一個儲存鍵/值對的hashmap.其守護程式(daemon)是用C寫的.但是客戶端可以用任何語言來編寫,並通過Memcached協議與守護程式通訊,且它並不提供冗餘.當某個伺服器停止執行或崩潰了,所有存放在該伺服器上的鍵/值對都將丟失.Memcached(官方網站:http://www.memcached.org/)由Danga Interactive開發,用於提升LiveJournal.com訪問速度.LJ每秒動態頁面訪問量幾千次,使用者700萬.Memcached將資料庫負載大幅降低,以便更好地分配資源,更快地訪問.

18.HTTP Proxy模組

該模組用於轉發請求到其他的伺服器.keep-alive是指在HTTP/1.1協議中,同一個連線中發出和接收多次HTTP請求,節省了建立TCP連線過程的時間開銷.而HTTP/1.0協議不具備keep-alive請求的能力.因此,在HTTP/1.0協議中,每一個到後端的請求都會建立一個連線,傳輸完成後會刪除這個連線.Nginx採用HTTP/1.1協議與瀏覽器進行通訊,採用HTTP/1.0協議與後端伺服器進行通訊.

proxy_cache相關指令集

1)proxy_cache

2)proxy_cache_path

3)paroxy_cache_methods

4)proxy_cache_min_uses

5)proxy_cache_valid

6)proxy_cache_use_stale

14.HTTP SSI 模組

SSI,通常稱為伺服器嵌入.SSI的工作原理:將內容傳送到瀏覽器之前,可以使用”伺服器端包含(SSI)”指令將文字,圖形或應用程式資訊包含到網頁中.例如可以使用SSI包含時間/日期戳,版權宣告或供客戶填寫並返回的表單.對於在多個檔案中重複出現的文字或圖形,使用包含檔案是一種簡便的方法.將內容存入一個包含檔案中即可,而不必將內容輸入所有檔案。

15.HTTP Userid模組.

該模組相當於Apache的mod_uid模組,主要用於做客戶端的身份標識.它主要使用$uid_got和$uid_set變數.


相關文章