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變量.html