Nginx的幾個重要模組
ngx_http_ssl_module
讓Nginx可以支援HTTPS的模組,此模組下的大多數指令都應用在http,server上下文
①ssl on | off;
是否開啟ssl功能
②ssl_certificate file;
當前虛擬主機使用的PEM格式的證書檔案
③ssl_certificate_key file;
當前虛擬主機使用的證書中與公鑰配對的私鑰檔案
④ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
ssl協議的版本,SSLv2不安全,建議使用TLS,預設使用的是TLS
⑤ssl_session_timeout time;
ssl會話超時時長,指ssl會話中快取條目的有效時長,預設為5m
⑥ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
指明ssl會話的快取機制,預設是關閉的
builtin //使用openssl內建的快取機制,為worker獨有
shared //由各worker共享的快取
name //快取空間的名稱
size //快取空間的大小/單位位元組,每1MB記憶體空間可快取4000個會話
⑦ssl_prefer_server_ciphers on | off;
傾向於使用伺服器端的加密演算法,預設是關閉的
ngx_http_log_module
此模組可以基於給定的格式記錄請求於日誌中
①access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
用在http,server,location,if in location,limit_except上下文
預設值是access_log logs/access.log combined;
②log_format name string ...;
定義日誌格式
用在http上下文中
③open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
定義開啟日誌檔案快取功能
用於http,server,location上下文,預設是關閉的
max //最大快取條目
inactive=time //非活動時長,預設為10s
min_uses //最少使用次數,預設為1次
valid=time //驗證快取條目有效性的時長,預設為60s
ngx_http_rewrite_module
基於此模組實現對請求的URL進行重寫、重定向
①rewrite regex replacement [flag];
用在server,location,if上下文中
/*①把使用者請求的URI基於regex做檢查,匹配到時將替換為replacement指定的字串
②在同一個location中存在多個rewrite規則會自上而下逐個被檢查(最多迴圈10次),可以使用flag控制此迴圈功能
③如果replacement中有以http或https開頭,則替換結果會直接以重定向的方式返回客戶端*/
[flag]:
last //重寫完成後停止對當前url在當前Location中的後續其他重寫操作,改為對新url的新一輪處理;
break //重寫完成後停止對當前url在當前Location中的後續其他重寫操作;(退出rewrite中的規則)
redirect //重寫完成後以臨時重定向方式直接返回重寫後生成的新的URL給客戶端,由客戶端對新的URL再次請求(響應碼:302)
permanent //重寫完成後以永久重定向方式直接返回重寫後生成的新的URL給客戶端,由客戶端對新的URL再次請求(響應碼:301)
②rewrite_log on | off;
是否啟用重寫日誌;啟用時,日誌資訊被髮往錯誤日誌,預設是關閉的
用在http,server,location,if上下文
③if (condition) { ... }
條件判斷機制,在條件滿足時,執行配置塊中的配置,引入了一個新的配置上下文
僅用在server,location上下文中
condition:
//比較表示式:
==,!=
~ //模式匹配,區分字元大小寫
~* //模式匹配,不區分字元大小寫
!~ //模式不匹配,區分字元大小寫
!~* //模式不匹配,不區分字元大小寫
//檔案及目錄存在性判斷:
-f,!-f //檔案
-d,!-d //目錄
-e,!-e //存在
-x,!-x //執行許可權
//示例:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
④return code [text];
return code URL;
return URL;
以指定的響應碼和URL迴應客戶端
用在server,location,if上下文中
⑤set $variable value;
使用者自定義變數
用在server,location,if上下文中
ngx_http_gzip_module
過濾器,對指定型別的資源壓縮傳輸以節約頻寬
①gzip on | off;
啟用或禁用gzip壓縮響應報文
用在http,server,location,if in location上下文中
②gzip_comp_level level;
指定壓縮比(1-9),預設為1
用在http,server,location上下文
③gzip_disable regex ...;
regex是匹配客戶端瀏覽器型別的模式,表示對匹配到的瀏覽器不執行壓縮響應報文
用在http,server,location上下文
④gzip_min_length length;
觸發啟用壓縮功能的響應報文的最小長度
用在http,server,location上下文
⑤gzip_http_version 1.0 | 1.1;
設定啟用壓縮功能時,協議的最小版本,如果設定為1.1,1.0則不壓縮
用在http,server,location上下文
⑥gzip_types mime-type ...;
指定僅執行壓縮的資源內容型別,預設為text/html
用在http,server,location上下文
⑦gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
對代理的請求基於何種屬性判斷其是否應該啟用壓縮功能
用在http,server,location上下文
ngx_http_fastcgi_module
基於此模組實現與php-fpm結合
①fastcgi_pass address;
指明後端的伺服器,address是fpm伺服器監聽的地址和埠
用在location和if in location上下文
②fastcgi_index name;
fastcgi應用的主頁名稱
用在http,server,location上下文
③fastcgi_param parameter value [if_not_empty];
傳遞給fpm伺服器的引數及其值
用在http,server,location上下文
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
//更多引數查閱fastcgi_params
④fastcgi_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] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
定義fastcgi的快取相關,僅能定義在http上下文
path //檔案系統路徑,用於儲存快取的檔案資料
max_size=size //定義此路徑下的多大空間用於儲存快取資料
levels=#[:#[:#]] //快取目錄層級定義
//如:levels=1:2
keys_zone=name:size //記憶體空間中用於快取k/v對映關係的空間名稱及大小
inactive=time //非活動時間
⑤fastcgi_cache zone | off;
啟用快取功能,存於哪個zone中,依賴於上個配置中的定義
用在http,server,location上下文
⑥fastcgi_cache_key string;
定義要使用的快取鍵
用在http,server,location上下文
//示例
fastcgi_cache_key localhost:9000$request_uri;
⑦fastcgi_cache_methods GET | HEAD | POST ...;
快取基於哪些請求方法的相關資料
用在http,server,location上下文
⑧fastcgi_cache_min_uses number;
指定時間內快取的最少使用次數
用在http,server,location上下文
⑨fastcgi_cache_valid [code ...] time;
對不同響應碼設定其可快取時長
//示例
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404 1m;
注意:啟用快取功能時,至少應該指定的三個引數:fastcgi_cache,fastcgi_cache_key,fastcgi_cache_valid
/*
Nginx快取的實現機制
分兩部分儲存快取資訊,
一部分放於記憶體中:key-value形式
其中key是url,value是快取資訊檔案的校驗碼(md5)
另一部分是將快取資訊的檔案置於磁碟上,並基於md5校驗碼實現分級儲存,以便查詢
*/
基於此模組實現反代客戶端請求至後端伺服器
①proxy_pass URL;
代理指令,後跟後端主機的URL
用在location,if in location,limit_except上下文
//①proxy_pass後面的路徑不帶uri時,會把location的uri傳遞給後端主機
location /uri/ {
proxy_pass http://HOST;
}
//假如location中的/uri/是/bbs/,訪問的站點是www.a.com,則通過proxy_pass傳遞給後端主機的URL是:http://www.a.com/bbs/
//②proxy_pass後面路徑是一個uri時,其會將location的uri替換為proxy_pass後端主機的uri
location /uri/ {
proxy_pass http://HOST/new_uri/;
}
//假如location中的/uri/是/bbs/,訪問的站點是www.a.com,proxy_pass後面的new_uri是/BBS/,則通過proxy_pass傳遞給後端主機的URL是:http://www.a.com/BBS/;
//③如果location定義uri時使用了正則表示式匹配機制,則proxy_pass後的路徑必須不能使用uri
location ~|~* PATTERN {
proxy_pass http://HOST;
}
②proxy_set_header field value;
設定向後端主機發送的請求報文的首部及其值
用在http,server,location上下文
proxy_set_header Real_Client $remote_addr(client addr);
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
//保留原來的值再附加新值(建議使用)
③proxy_cache_path path [levels=levels] 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] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
定義快取路徑
只能定義在http上下文
//示例
proxy_cache_path /var/cache levels=2:1 keys_zone=mycache:10m max_size=10m;
④proxy_cache zone | off;
呼叫快取,預設為off
用在http,server,location上下文
⑤proxy_cache_key string;
定義快取鍵;
用在http,server,location上下文
//示例
proxy_cache_key $request_uri(一般是請求uri)
proxy_cache_key $scheme$proxy_host$request_uri
⑥proxy_cache_valid [code ...] time;
為不同的響應碼設定其快取的時長
用在http,server,location上下文
//示例
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
⑦proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
向後端請求不到相應資源時基於哪種響應碼或錯誤,使用過期快取響應客戶端
用在http,server,location上下文
⑧proxy_connect_timeout time;
與後端建立連線的超時時長,預設60s,最長為75s
用在http,server,location上下文
⑨proxy_read_timeout time;
等待後端主機發送響應報文的超時時長,預設為60s
用在http,server,location上下文
⑨+①proxy_send_timeout time;
向後端伺服器傳送請求報文的超時時長,預設為60s
用在http,server,location上下文
基於此模組在響應給客戶端的報文中新增首部
①add_header name value [always];
向響應報文新增自定義首部,並賦值
用在http,server,location,if in location上下文
add_header X-Cache $upstream_cache_status;
//可檢視是否命中快取
//示例:
add_header x-via $server_addr(接收請求報文的伺服器地址)
②expires [modified] time;
expires epoch | max | off;
用於新增Expire及Cache-Control首部或修改其值
用在http,server,location,if in location上下文
ngx_http_upstream_module
基於此模組實現nginx的負載均衡:定義伺服器組,將多個後端主機定義為伺服器組,而後可由proxy_pass,fastcgi_pass,memcached_pass等呼叫
①upstream name { ... };
定義後端伺服器組,引入新的上下文,只能用於http上下文
②server address [parameters];
定義後端伺服器的地址和相關引數
僅用於在upstream上下文
地址格式:
IP[:port]
HOSTNAME[:port]
unix:/PATH/TO/SOME_SOCK_FILE
引數:
weight=number //伺服器排程權重
max_fails=number //最大失敗嘗試次數
fail_timeout=time //設定伺服器失敗(不可用)的超時時長
backup //備用主機,相當於sorry_server
down //手動標記其不再處理任何使用者請求
③ip_hash;
指定排程演算法:源地址雜湊
僅用於在upstream上下文
④least_conn;
指定排程演算法:最少連線
僅用於在upstream上下文
⑤keepalive connections;
保持連線的個數
僅用於在upstream上下文
⑥health_check [parameters];
定義後端主機的健康狀態檢測
只能在location中使用
//可用引數:
interval=# //檢測的頻度,預設為5s
fails=# //判定為失敗的檢測次數
passes=# //判定為成功的檢測次數
uri=uri //執行檢測時請求的uri,預設為主頁
match=name //基於那個match做檢測結果為'ok'或'not ok'的判定
port=# //向伺服器的那個埠發起檢測請求
⑦match name {...};
對後端主機做檢測時,定義其結果的判斷標準,nginx2.0+才支援
僅用於http上下文
//專用指令:
status:期望的響應碼
status CODE
status !CODE
status CODE-CODE
header:基於響應首部進行判斷
header HEADER=VALUE
header HEADER!=VALUE
header [!]HEADER
header HEADER~VALUE
body:期望的響應報文的主體部分該有的內容
body ~"CONTENT"
body !~"CONTENT"
⑧hash key [consistent];
定義排程方法,可自定義基於何種資訊(key)進行繫結
僅用於在upstream上下文
hash $remote_addr
hash $request_uri
hash $cookie_username