1. 程式人生 > >Nginx系列--04HTTP常用指令及常用模塊

Nginx系列--04HTTP常用指令及常用模塊

Nginx 訪問控制 Nginx狀態信息 Nginx HTTP常用指令

前言

本篇總結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,他設置的是客戶端保持長連接的時間,超過這個時間客戶端將會斷開連接,這個參數是可選的。
可在http,sever,location上下文中使用
接下來我們測試一下長連接
示例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常用指令及常用模塊