Nginx系列--04HTTP常用指令及常用模塊
本篇總結Nginx中HTTP常用指令與一些常用的模塊
一. HTTP協議常用指令
1. keepalive_timeout
語法 :
keepalive_timeout timeout [header_timeout];
解釋 :
當第一個參數timeout的值不為零時,開啟長連接。什麽是長連接?我們知道應用層的HTTP協議使用的四層協議是tcp連接,而tcp連接非常重量級,如果用戶請求一次資源就經歷一次tcp的三次握手和四次揮手,傷不起呀!所以最好是能夠重用TCP連接,用戶請求一次資源後TCP連接不斷開,而是等待用戶的再一次請求。這種設計是非常合理的,因為一般的網站首頁都是有好幾十個請求的。我們以新浪官網為例
那長連接什麽時候斷開呢?他可以從兩個維度進行判斷,一個時間(timeout指定),一個請求的鏈接數(keepalive_requests指定)。那一個維度達到就斷開tcp連接。
長連接設置的時間並非越長越好,因為有可能用戶一次沒有這麽多請求,長期保持一個空閑的鏈接也是一種資源的浪費。那長連接保持多長時間最佳?答案是,沒有最佳,一般來說timeout的默認值75秒相對大一點,15秒可以作為一個參考值。
timeout: 這個值Nginx默認為75s,這個為長連接在服務端保持時間。[header_timeout]將會在響應報文中設置keep-alive=header_timeout,他設置的是客戶端保持長連接的時間,超過這個時間客戶端將會斷開連接,這個參數是可選的。
接下來我們測試一下長連接
示例1--長連接開啟:
配置文件/etc/nginx/nginx.conf
http {
server {
listen 80;
server_name node1;
root /var/www/vhost/;
index index.html;
keepalive_timeout 600s;
}
}
長連接保持的是十分鐘。
示例2--關閉長連接
配置文件/etc/nginx/nginx.conf
http { server { listen 80; server_name node1; root /var/www/vhost/; index index.html; keepalive_timeout 0s; } }
修改了配置文件,記得重載喲
__示例3--header_timeout__
http {
server {
listen: 80;
server_name node1;
root /var/www/vhost;
index index.html;
keepalive_timeout 10s 5s;
}
}
2. keepalive_requests
語法
keepalive_requests number
解釋
在一次長連接中最多能夠請求的此時,達到此值服務器端將會斷開連接。
可在http,server, location上下文中使用。
示例
http {
server {
listen 80;
server_name node1;
root /var/www/vhost;
index index.html
keepalive_timeout 600s;
keepavlie_requests 2;
}
}
3. keepalive_disabled
語法
keepalive_disable none | browser ...;
解釋
指明那些瀏覽器不開啟長連接,像早期的ie 6瀏覽器就不支持長連接。默認msie6不開啟長連接。對於這些不支持長連接的瀏覽器,server端開啟長連接就沒有必要了,所以要將不支持的瀏覽器去除。
可在http,server,location上下文中使用。
4. send_timeout
語法
send_timeout time
解釋
指定相應客戶端的超時時長。他是兩次成功寫操作相應報文時間,而不是傳輸整個相應報文時間。如果客戶端在這個時間沒有收到任何相應,連接會斷開。默認是60秒
5. client_body_buffer_size
讀取緩沖區大小,這個緩沖區用於存放用戶請求body部分。如果請求的body大小大於緩沖區大小,整個body部分或者body的部分將會被寫入臨時文件中。
6. client_body_temp_path
語法
client_body_temp_path path [level1 [level2 [level3]]];
解釋
指明用於存儲用戶body的目錄,他是一個三級子目錄結構。
示例
配置:
client_body_temp_path /spool/nginx/client_temp 1 2;
文件路徑:
/spool/nginx/client_temp/7/45/00000123457
說明:
存儲在磁盤是,每一個body會以一個文件的形式存在,他的文件名是通過hash得到。示例中的hash文件名為74500000123457。配置中的level 1為1,表明取hash中的第一個字母作為一級目錄,配置中的level 2 為2,表明取hash中後續的兩個字母為二級目錄。所以文件路徑為/spool/nginx/client_temp/7/45/00000123457。
7. limit_rate
設置響應報文傳輸給客戶端的速率。單位是b/s。默認是0,0表示沒有限制。
8. limit_except
設置能在location中使用的http方法。可以是如下這些:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。容許GET方法,那麽HEAD方法也可以。
註意次指令只能在location中使用。
示例
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
這個配置可以使用GET和HEAD方法。
9. sendfile
這是sendfile功能是否開啟,默認是off。
sendfile 功能:對於小的相應報文,並不是在應用層進行封裝,而是在內核中封裝後直接返回給用戶。
二. 常用模塊
1. ngx_http_access_module
作用
通過用戶IP限制用戶訪問
示例
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
說明
禁止192.168.1.1訪問,除了192.168.1.0/24,10.1.1.0/16,2001:0db8::/32,其余都拒絕。
2. ngx_http_auth_basic_module
作用
通過用戶名和密碼控制用戶訪問
示例
location / {
auth_base "HTTP Basic Authentication ";
auth_basic_file_path /etc/nginx/conf.d/htpasswd;
}
創建登陸用戶
使用的工具是htpasswd,來自httpd-tools包中
~]# htpasswd -c /etc/nginx/conf.d/htpasswd user1
3. ngx_http_sub_status_module
用於查看nginx內部狀態。
示例
location /status {
stub_status;
}
4. ngx_http_gzip_module
作用
用於壓縮相應報文
示例
gzip on; #啟用壓縮功能
gzip_comp_level 6; #指明壓縮的的高級,數字越大,響應報文越小,但越占用CPU。
gzip_min_length 64; # 當相應報文達到多少時才進行壓縮。單位是字節
gzip_proxied any;
gzip_types text/xml text/css application/javascript;
6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx作為代理服務器接收到從被代理服務器發送的響應報文後,在何種條件下啟用壓縮功能的;
off:對代理的請求不啟用
no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能;
參考
http://nginx.org/en/docs/
http://nginx.org/en/docs/http/ngx_http_access_module.html
Nginx系列--04HTTP常用指令及常用模塊