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 { ... }html
功能:容許根據用戶請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理
=:精確匹配
~:正則表達式模式匹配,匹配時區分字符大小寫
~*:正則表達式模式匹配,匹配時忽略字符大小寫
^~:只須要前半部分與uri匹配便可,不檢查正則表達式
字符字面量最精確匹配、正則表達式檢索(由多個時,由第一個匹配到的所處理),按字符字面量
匹配優先級:精確匹配=、^~ 、~或* 、不帶符號的URL;
六、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;
自左向右嘗試讀取有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指令任一權限便可經過匹配 node
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}nginx
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;
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指定定義的引用請求均爲不合法)
http://nginx.org/en/docs/http/ngx_http_rewrite_module.htmlweb
rewrite regex replacement [flag];
location / {
root /www;
rewrite ^/imgages/(.*)$ /imgs/$1
last;
rewrite ^/imgs/(.*)$ /images/$1
break;
}
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 : 引用狀態碼