nginx 引數詳解
https://www.cnblogs.com/woodman/p/6200634.html
nginx的http web功能
必須使用虛擬機器來配置站點:每個虛擬主機使用一個server{}段來配置
非虛擬主機的配置、公共選項,需要定義在server之外,http之內
http{
directive value;
....
server{
}
server{
}
......
}
1.server{}
定義一個虛擬主機:nginx支援使用基於主機名或IP的虛擬主機
注意:
PORT :基於監聽的埠
server_name :基於主機名區分
2.listen
listen address[:port][default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;
listen port [default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;
default_server:定義此server為http中預設的server;如果所有的server中無任何一個listen使用此引數,那麼第一個server即為預設server
rcvbuf=SIZE:接收快取大小
sndbuf=SIZE: 傳送快取大小
ssl:https server:必須以ssl連線
3.server_name [...];
server_name可以跟多個主機名,名稱可以使用萬用字元和正則表示式(通常以~開頭):當nginx收到一個請求時,會取出其首部的server的值,而後跟眾server_name進行比較:比較方式
(1) 先做精確匹配 www.tshare365.com
(2) 左側萬用字元匹配 *.tshare365.com
(3) 右側萬用字元匹配 www.*
(4) 正則表示式匹配 ~^.*\.tshare365\.com$
4.server_name_hash_bucket_size 32|64|128
為了實現快速主機查詢,nginx使用hash表來儲存主機名
5.location [ =|~|~*|^~] uri { ... }
location @name { ... }
功能:允許根據使用者請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理
=:精確匹配
~:正則表示式模式匹配,匹配時區分字元大小寫
~*:正則表示式模式匹配,匹配時忽略字元大小寫
^~:只需要前半部分與uri匹配即可,不檢查正則表示式
匹配優先順序:
字元字面量最精確匹配、正則表示式檢索(由多個時,由第一個匹配到的所處理),按字元字面量
匹配優先順序:精確匹配=、^~ 、~或* 、不帶符號的URL;
6、tcp_nopush on | off ,預設off(推薦)
是否啟用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)選項;僅在啟用sendfile為On時有用;
檔案路徑定義
1.root path
設定web資源路徑,用於指定請求的根文件目錄,從跟開始匹配
root:root/URI
location ^~ /images/{
root /web;
}
開啟logo.png則訪問的是 /web/images/logo.png
http:///www.tshare365.com/images/logo.png
2.alias path
指定路徑別名,只能用於location中,從最後一個/開始匹配
alias:alias/
location ^~ /images/{
alias /web;
}
開啟logo.png則訪問的是 /web/logo.png
http:///www.tshare365.com/images/logo.png
3.index file....
定義預設頁面,可以跟多個值。自左向右匹配
4.error_page code ... [=[response]] uri;
當對於某個請求發回錯誤時,如果匹配上了error_page指令中設定的code,則從定向至新的新URI中 (寫在server{}之後)
錯誤重定向
5.try_files path1 [path2...] uri;
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
自左向右嘗試讀取有path所指定路徑,在第一找到即停止並返回,如果所有path均不存在,則返回最後一個uri
location ~* ^/document/(.*)${
root /www/htdocs;
try_files $uri /docu/$1 /temp.html; #$1表示 ( )中的內容
}
location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
網路連線相關的設定
1.keepalive_timeout time;
保持連線的超時時長,預設為75s;0表示禁止連線;
2.keepalive_requests n;
在一次長連線上允許承載的最大請求數,預設100;
3.keepalive_disable [msie6|safari |none]
對指定的瀏覽器禁用長連線
4.tcp_nodelay on|off
對keepalive模式下的連結是否使用TCP_NODELAY選項;(關閉TCP延遲響應)
5.client_header_timeout time
讀取http請求首部的超時時長
6.client_body_timeout time
讀取http請求包體的超時時間
7.send_timeout #;
傳送響應的超時時長,預設60s;
8.壓縮:
gzip
gzip on|off
gzip_buffer 使用的快取大小
gzip_comp_level 壓縮的級別
gzip_disable 不壓縮的型別或瀏覽器
gzip_min_length 最少壓縮的大小
gzip_http_version 壓縮完成以後傳送http的版本
gzip_types:只壓縮的格式
對客戶端請求的限制:
1.client_max_body_size size;
http請求包體的最大值,常用於限定客戶端所能夠請求的最大包體,根據請求首部中的Content-Length來檢查,以避免無用的傳輸
client_body_buffer_size size;預設16k
客戶請求報文body的緩衝區大小,超出預設則移存於磁碟上;
client_body_temp_path path [level1 [level2 [level3]]];
設定儲存客戶端請求body的臨時儲存路徑以及子目錄結構數量和數量
2.limit_except method ...{ ... };
設定禁止的方法,只能用於location中
控制1網段除get外的其他方法都可用。
limit_except GET { allow 192.168.1.0/32; deny all; }
3. limit_rate speed;
限制客戶端每秒傳輸的位元組數,預設為0,表示沒有限制
4.limit_rate_after time;
nginx向客戶端傳送響應報文時,如果時長超過了此處指定的時長,則後續的傳送過程開始限速;
檔案操作的優化
1. sendfile on|off
直接從記憶體空間讀取,速度加快
tcp_nopush on | off ,預設off(推薦)
是否啟用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)選項;僅在啟用sendfile為On時有用;
2. aio on|off ;非同步IO模式。
是否啟用aio功能
4. directio size |off ; 預設關閉。
5. open_file_cache max=N [inactive=time]|off
是否開啟檔案快取功能
max:快取條目的最大值,當滿了以後將根據LRU(最近最少連線數)演算法進行置換
inactive:某快取條目在指定時長內沒有被訪問過時,將自動被刪除;預設為60s
快取的資訊包括:
(1)檔案控制代碼、檔案大小和上次修改時間
(2)已經開啟的目錄結構:
(3)沒有找到或沒有訪問許可權的資訊;由6開啟。
6. open_file_cache_errors on|off
是否快取檔案找不到或沒有許可權訪問等相關資訊
7. open_file_cache_valid time
多長時間檢查一次快取中的條目是否超出非活動時長,預設為60s;
8. open_file_cache_min_use #;
在inactive指定的時長內被訪問超過此處指定的次數時,才不會被刪除;
9. autoindex on | off ;
是否開啟目錄瀏覽,多擁有下載頁面。一般定義在location中。
對客戶端請求的特殊處理
1.ignore_invalid_headers on|off ;只能用於server和http
是否忽略不合法的http首部,預設為on,off意味著請求首部中出現不合規的首部將拒絕響應
2.log_not_found on|off TSL(http server location)
使用者訪問的檔案不存在時,是否將其記錄到錯誤日誌中
3.resolver address ;
指定nginx使用的dns伺服器地址
4.resolver_timeout times;
指定DNS解析超時時長,預設為30s
5.server_tokens on|off TSL
是否在錯誤頁面中顯示nginx的版本號
6. auth_basic string;
auth_basic_user_file FILE; 使用者認證的帳號檔案
# htpasswd -c /etc/nginx/conf/nginx.passwd username //使用http-tool工具建立密文密碼
格式:
name:passwd
密碼格式
(1)encrypted with the crypt() function;
(2)md5;
7. satisfy all | any ;
如果在一個欄位中同時使用了Access模組和Auth Basic模組的指令,可以使用這個指令確定一種驗證方式:
all - 必須同時匹配Access和Auth Basic中指令指定的許可權。
any - 具有Access 或 Auth Basic指令任一許可權即可通過匹配
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
8. log_format name string ……;
定義日誌格式和名稱;日誌格式一般通過呼叫變數來定義;
9. access_log
path
[format
[buffer
=size
[flush
=time
]] [if
=condition
]]; access_log
path
format
gzip[=
[level
]buffer
=size
] [flush
=time
] [if
=condition
]; access_log
syslog:
server
=address
[,parameter
=value
] [format
[if
=condition
]]; access_log
off
;
訪問日誌路徑,格式名稱以及快取大小和刷寫時間間隔;建議定義buffer提示效能;
10. open_log_file_cache
max
=N
[inactive
=time
] [min_uses
=N
] [valid
=time
]; open_log_file_cache
off
;
11. stub_status
location /basic_status {
stub_status on;
allow x.x.x.0/16;
deny all;
}
Active connections : 當前活動的客戶端連線數;
accepts :已接受的客戶端連線總數量;
handled :已經處理過的客戶端連線總數量;
requests :客戶端總的請求數量;
Reading :正在讀取的客戶端請求的數量;
Writing :正在向其傳送響應報文的連線數量;
Waiting :當前等待請求的空閒連線數量;
12 防盜鏈 ngx_http_referer_module (基於請求報文中的referer首部的值做訪問控制)
(1)定義和規定有效引用
valid_referers none |blocked |server_names|string ...
(2)判斷不合規的引用
location ~* \.(jpg|png|gif|jpeg)$ {
root /www;
valid_referers none blocked *.tshare365.com *.woodman.com ;
if ($invalid_referer) {
# return 403;
rewrite http://www.woodman.com/403.html;
}
}
none:請求報文不存在referer首部;
blocked:請求報文中存在referer首部,但其沒有有效值。
server_names:值為主機名
arbitrary string:直接字串,可以使用 * 通配
regular expression:以~起始的正則表示式;
內建變數:$invalid_referer (所有不能符合valid_referers指定定義的引用請求均為不合法)
13.URL rewrite
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
rewrite regex replacement [flag];
location / {
root /www;
rewrite ^/imgages/(.*)$ /imgs/$1 last;
rewrite ^/imgs/(.*)$ /images/$1 break;
}
http://www.b.org./images/a.jpg --> http://www.b.org/imgs/a.jpg
flag:標誌位
last:一旦被當前規則匹配並重寫後立即停止檢查後續的其他rewrite的規則,而後通過重寫後的規則重新發起請求
break:一旦被當前規則匹配並重寫後立即停止檢查後續的其他rewrite的規則,而後繼續由nginx進行後續的操作
redirect:返回302臨時重定向程式碼
permanent:返回301永久重定向
nginx最多迴圈10次,超出之後返回500錯誤
括號不需要轉移
注意:一般將rewrite寫在location中時都使用break標誌,或者將rewrite寫在if上下文中
rewrite_log on|off
是否將重寫過程記錄在錯誤日誌中,預設為notice級別;預設為off;
return code:
用於結束rewrite規則,並且為客戶返回狀態碼:可以使用的狀態碼有204,400,402-406,500-504等
if (condition) {
return code;
}
用於檢測條件是否成立
http核心模組的內建變數:
$uri:當前請求的uri,不帶引數
$request_uri:請求的uri,帶完整引數
$host:http請求報文中host首部;如果請求中沒有host首部,則以處理此請求的虛擬主機的主機名代替
$hostname:nginx服務執行所在主機的主機名
$remote_addr:客戶端IP
$remote_port::客戶端port
$remote_user:使用使用者認證時客戶端使用者輸入的使用者名稱
$request_filename:使用者請求中的URI經過本地root或alias轉換後對映的本地的檔案路徑
$request_method:請求方法
$server_addr:伺服器地址
$server_name: 伺服器名稱
$server_port:伺服器埠
$server_protocol:伺服器向客戶端傳送響應時的協議,如http/1.1,http/1.0
$scheme:在請求中使用的scheme 對映協議本身的協議。 如https://www.tshare365.com中的https;
$http_HEADER:匹配請求報文中指定的HEADER,$http_host匹配請求報文中的host首部
$sent_http_HEADER:匹配響應報文中指定的HERDER,例如$http_content_type匹配相應報文中的content-type首部
$document_root:當前請求對映到的root配置
$status : 引用狀態碼