Nginx的HTTP模塊
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變量.