精通Nginx(二)

博文參考

http://wiki.nginx.org/HttpUpstreamConsistentHash
http://wiki.nginx.org/HttpUpstreamFairModule
http://wiki.nginx.org/HttpUpstreamRequestHashModule
http://www.web-polygraph.org/

架構模型

clipboard.png
clipboard.png

核心配置

與套接字相關的配置:

一、server { … } #配置一個虛擬主機;javascript

Default:—

        Context:http

server {   # 配置虛擬主機示例
    listen address[:PORT]|PORT;
    server_name SERVER_NAME;
    root /PATH/TO/DOCUMENT_ROOT;
}

===========================================================================php

二、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE #定義虛擬主機所監聽的端口css

listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

    Default:listen *:80 | *:8000;

    Context:server

default_server:設定爲默認虛擬主機;html

ssl:限制僅可以經過ssl鏈接提供服務;java

backlog=number:後援隊列長度;node

rcvbuf=size:接收緩衝區大小;mysql

sndbuf=size:發送緩衝區大小linux

===========================================================================nginx

三、server_name name …; #指明虛擬主機的主機名稱;後可跟多個由空白字符分隔的字符串;web

Default:server_name 「」;

    Context:server

指明虛擬主機的主機名稱;後可跟多個由空白字符分隔的字符串;

支持通配任意長度的任意字符;server_name .rookie.com www.rookie.*

支持~起始的字符作正則表達式模式匹配;server_name ~^wwwd+.rookie.com$

匹配機制:

(1) 首先是字符串精確匹配

(2) 左側*通配符

(3) 右側*通配符

(4) 正則表達式

===========================================================================

四、tcp_nodelay on | off; #在keepalived模式下的鏈接是否啓用TCP_NODELAY選項;將多個小包打包成一個報文發送給客戶端

tcp_nopush on|off;

在sendfile模式下,是否啓用TCP_CORK選項

Default:tcp_nodelay on;

    Context:http, server, location

===========================================================================

五、sendfile on | off; #是否啓用sendfile功能;

Default:sendfile off;

    Context:http, server, location, if in location

===========================================================================

定義路徑相關的配置:

六、root path; #設置web資源路徑映射;用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;可用的位置:http, server, location, if in location

Default:root html;

    Context:http, server, location, if in location

===========================================================================

七、location [ = | ~ | ~* | ^~ ] uri { … } #在一個server中location配置段可存在多個,用於實現從uri到文件系統的路徑映射;ngnix會根據用戶請求的URI來檢查定義的全部location,並找出一個最佳匹配,然後應用其配置

location @name { … }

Default:—

    Context:server, location

=:對URI作精確匹配;例如, http://www.rookie.com/, http://www.rookie.com/index.html

location = / {

            …

        }

~:對URI作正則表達式模式匹配,區分字符大小寫

~*:對URI作正則表達式模式匹配,不區分字符大小寫

^~:對URI的左半部分作匹配檢查,不區分字符大小寫

不帶符號:匹配起始於此uri的全部的url

匹配優先級:=, ^~, ~/~*,不帶符號

===========================================================================

八、alias path; #定義路徑別名,文檔映射的另外一種機制;僅能用於location上下文

Syntax: alias path;

    Default:—

    Context:location

注意:location中使用root指令和alias指令的意義不一樣

(a) root,給定的路徑對應於location中的/uri/左側的/

(b) alias,給定的路徑對應於location中的/uri/右側的/

/下除禁止172.16.252.245訪問外,其它都容許

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf

server {
        listen 80;
        server_name www.ilinux.io;
        root /data/nginx/vhost1;
        location / {
                deny 172.16.250.217;/      #下除禁止172.16.252.245訪問
                allow all;                           #其它都容許
        }
}
[root@nginx2 ~]#vim /etc/hosts           #作域名解析
172.16.254.217  www.ilinux.io
[root@nginx2 ~]#curl http://www.ilinux.io
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>

===========================================================================

禁止172.16.252.245訪問全部jpg|png結尾格式的圖片

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {
        listen 80;
        server_name www.ilinux.io;
        root /data/nginx/vhost1;
        location ~* \.(jpg|png)$ {
                deny 172.16.250.217;    #禁止172.16.252.245訪問全部jpg|png結尾格式的圖片
                allow all;                        #其他的都容許訪問
        }
}
[root@nginx2 ~]#curl http://www.ilinux.io    # 由於不是訪問jpg|png結尾格式的圖片,因此能顯示內容
<h1>Nginx Vhost1</h1>
[root@nginx1 /data/nginx/vhost1]#find /usr/share/ -iname "*.jpg" -exec cp {} ./ \;  # 拷貝圖片到當前路徑下
 

![clipboard.png](/img/bVTIWl)

[root@nginx2 ~]#curl http://www.ilinux.io/leaf.jpg     
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>

===========================================================================

相對location以外的,在location中定義的生效

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {
        listen 80;
        server_name www.ilinux.io;
        root /data/nginx/vhost1;
        location / {
                root /data/nginx/vhost2;     #相對於root /data/nginx/vhost1;在location中定義的生效,如不定義root,則繼承root /data/nginx/vhost1;
                allow all;
        }
        location ~* \.(jpg|png)$ {
                deny 172.16.250.217;
                allow all;
        }
}
[root@nginx2 ~]#curl http://www.ilinux.io/index.html
<h1>vhost2</h1>

===========================================================================

[root@nginx1 /data/nginx/vhost1]#mkdir images
[root@nginx1 /data/nginx/vhost1]#mv 2560x1600.jpg astronaut.jpg background.jpg images/
[root@nginx1 /data/nginx/vhost1]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx1 /data/nginx/vhost1]#nginx -s reload
 
![clipboard.png](/img/bVTIWc)

===========================================================================

[root@nginx1 /data/nginx/vhost1]#mkdir /data/pictures/
[root@nginx1 /data/nginx/vhost1]#cp cat-eye.jpg day.jpg energy-arc.jpg /data/pictures/
[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {

listen 80;
    server_name www.ilinux.io;
    root /data/nginx/vhost1;
    location / {
            #root /data/nginx/vhost2;
            allow all;
    }
    location ~* \.(jpg|png)$ {
            deny 172.16.250.217;
            allow all;
    }
    location /images/ {
            root /data/pictures/;至關於在/下找images
    }

}
[root@nginx1 /data/nginx/vhost1]#nginx -t
[root@nginx1 /data/nginx/vhost1]#nginx -s reload

clipboard.png

[root@nginx1 /data/nginx/vhost1]#mkdir /data/pictures
[root@nginx1 /data/nginx/vhost1]#cp cat-eye.jpg day.jpg energy-arc.jpg /data/pictures/
[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {

listen 80;
    server_name www.ilinux.io;
    root /data/nginx/vhost1;
    location / {
            #root /data/nginx/vhost2;
            allow all;
    }
    location ~* \.(jpg|png)$ {
            deny 172.16.250.217;
            allow all;
    }
    location ^~/images/ {
            root /data/pictures/;
    }

}
[root@nginx1 /data/nginx/vhost1]#nginx -t
[root@nginx1 /data/nginx/vhost1]#nginx -s reload

clipboard.png

===========================================================================

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {

listen 80;
    server_name www.ilinux.io;
    root /data/nginx/vhost1;
    location / {
            #root /data/nginx/vhost2;
            allow all;
    }
    location ~* \.(jpg|png)$ {
            deny 172.16.250.217;
            allow all;
    }
    location ^~/images/ {
            alias /data/pictures/;
    }

}

clipboard.png

===========================================================================

九、index file …; #默認主頁面定義

Default:index index.html;

    Context:http, server, location

===========================================================================

十、error_page code … [=[response]] uri; #定義默認錯誤頁面

Default:—

    Context:http, server, location, if in location

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {

listen 80;
    server_name www.ilinux.io;
    root /data/nginx/vhost1;
    location / {
            #root /data/nginx/vhost2;
            allow all;
    }
    location ~* \.(jpg|png)$ {
            deny 172.16.250.217;
            allow all;
    }
    location ^~/images/ {
            alias /data/pictures/;
    }
    error_page 404 /notfound.html;         #若是是404就在notfound.html中
    location = /notfound.html {               #若是訪問notfound.html
            root /data/nginx/error_pages;    #錯誤頁面就在/data/nginx/error_pages/notfound.html中
    }

}
[root@nginx1 /etc/nginx/conf.d]#mkdir /data/nginx/error_pages
[root@nginx1 /etc/nginx/conf.d]#vim /data/nginx/error_pages/notfound.html
<h2>--------------------</h2>
<h3>notfound</h3>
[root@nginx1 /etc/nginx/conf.d]#nginx -s reload

clipboard.png

===========================================================================

十一、try_files file … uri;

===========================================================================

定義客戶端請求的相關配置:

十二、keepalive_timeout timeout [header_timeout]; #設定保持鏈接的超時時長,0表示禁止長鏈接;默認爲75s

Default:keepalive_timeout 75s;

    Context:http, server, location

===========================================================================

1三、keepalive_requests number; #在一次長鏈接上所容許請求的資源的最大數量,默認爲100(使用默認值便可)

Default:keepalive_requests 100;

    Context:http, server, location

===========================================================================

1四、keepalive_disable none | browser …; #對哪一種瀏覽器禁用長鏈接

Default:keepalive_disable msie6;

    Context:http, server, location

===========================================================================

1五、send_timeout time; #向客戶端發送響應報文的超時時長,是指兩次寫操做之間的間隔時長

如客戶端發送請求後,因爲斷電等等緣由,沒法接收到服務器發送的報文

Default:send_timeout 60s;

    Context:http, server, location

===========================================================================

1六、client_body_buffer_size size; #用於接收客戶端請求報文的body部分的緩衝區大小;默認爲16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置

Default:client_body_buffer_size 8k|16k;

    Context:http, server, location

===========================================================================

1七、client_body_temp_path path [level1 [level2 [level3]]]; #設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量

Default:client_body_temp_path client_body_temp;

    Context:http, server, location

16進制的數字

client_body_temp_path /var/tmp/client_body 2 1 1

2表示256個一級子目錄(256) 1表示每一個一級子目錄下有16個二級子目錄(25616) 1表示每一個二級子目錄下有16個三級子目錄(16256*16)

1:表示用一位16進制數字表示一級子目錄;0-f

2:表示用2位16進程數字表示二級子目錄:00-ff

2:表示用2位16進程數字表示三級子目錄:00-ff

===========================================================================

對客戶端進行限制的相關配置:

1八、limit_rate rate; #限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制

Default:limit_rate 0;

    Context:http, server, location, if in location

===========================================================================

1九、limit_except method … { … } #限制對指定的請求方法以外的其它方法的使用客戶端

Default:—

    Context:location
limit_except GET {               #GET之外的方法

        allow 192.168.1.0/32;      #只容許192.168.1.0/32網段使用

        deny  all;

    }

===========================================================================

20、aio on | off | threads[=pool]; #是否啓用aio功能(使用on)

Default:aio off;

    Context:http, server, location

===========================================================================

2一、directio size | off; #在Linux主機啓用O_DIRECT標記,此處意味文件大於等於給定的大小時使用,例如directio 4m

Default:directio off;

    Context:http, server, location

===========================================================================

2二、open_file_cache off; # 是否開啓緩存

open_file_cache max=N [inactive=time];

    Default:open_file_cache off;

    Context:http, server, location

nginx能夠緩存如下三種信息

(1) 文件的描述符、文件大小和最近一次的修改時間

(2) 打開的目錄結構

(3) 沒有找到的或者沒有權限訪問的文件的相關信息

max=N:可緩存的緩存項上限;達到上限後會使用LRU(最近最少使用)算法實現緩存管理

inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_users指令所指定的次數的緩存項即爲非活動項

===========================================================================

2三、open_file_cache_valid time; #緩存項有效性的檢查頻率;默認爲60s(空間不夠用可將秒數調低)

Default:open_file_cache_valid 60s;

    Context:http, server, location

===========================================================================

2四、open_file_cache_min_uses number; #在open_file_cache指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類爲活動項

Default:open_file_cache_min_uses 1;

    Context:http, server, location

===========================================================================

2五、open_file_cache_errors on | off; #是否緩存查找時發生錯誤的文件一類的信息(使用on)

Default:open_file_cache_errors off;

    Context:http, server, location

===========================================================================

ngx_http_access_module模塊:

實現基於ip的訪問控制功能

2六、allow address | CIDR | unix: | all;(容許)

===========================================================================

2七、deny address | CIDR | unix: | all;(禁止)

http, server, location, limit_except

===========================================================================

ngx_http_auth_basic_module模塊

實現基於用戶的訪問控制,使用basic機制進行用戶認證;

2八、auth_basic string | off;

===========================================================================

2九、auth_basic_user_file file;

location /admin/ {

alias /webapps/app1/data/;

 auth_basic 「Admin Area」;

 auth_basic_user_file /etc/nginx/.ngxpasswd;

}

注意:htpasswd命令由httpd-tools所提供

[root@nginx1 /etc/nginx/conf.d]#yum install httpd-tools
[root@nginx1 /etc/nginx/conf.d]#htpasswd -c -m /etc/nginx/.ngxpasswd tom
[root@nginx1 /etc/nginx/conf.d]#htpasswd -m /etc/nginx/.ngxpasswd jerry
[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
location ~* ^/(admin|login) { #若是路徑以admin|login開頭,

auth_basic "admin area or login url";    
            auth_basic_user_file /etc/nginx/.ngxpasswd;    #文件路徑/etc/nginx/.ngxpasswd

}
[root@nginx1 /etc/nginx/conf.d]#mkdir /data/nginx/vhost1/admin
[root@nginx1 /etc/nginx/conf.d]#vim /data/nginx/vhost1/admin/index.html
<h1>admin area</h1>

clipboard.png

輸入用戶名和密碼後成功進入

clipboard.png

===========================================================================

ngx_http_stub_status_module模塊(nginx內置的內建狀態頁)

用於輸出nginx的基本狀態信息;

Active connections: 291

server accepts handled requests

16630948 16630948 31070465

Reading: 6 Writing: 179 Waiting: 106

Active connections: 活動狀態的鏈接數;

accepts:已經接受的客戶端請求的總數;

handled:已經處理完成的客戶端請求的總數;

requests:客戶端發來的總的請求數;

Reading:處於讀取客戶端請求報文首部的鏈接的鏈接數;

Writing:處於向客戶端發送響應報文過程當中的鏈接數;

Waiting:處於等待客戶端發出請求的空閒鏈接數;

30、stub_status;

Default:—

Context:server, location

配置示例:
location /basic_status {
stub_status;
}

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
location /ngxstatus {

stub_status;
             access_log off;日誌不記錄

}
[root@nginx1 /etc/nginx/conf.d]#nginx -t
[root@nginx1 /etc/nginx/conf.d]#nginx -s reload

clipboard.png

===========================================================================

ngx_http_log_module模塊

he ngx_http_log_module module writes request logs in the specified format.(ngx_http_log_module模塊寫入請求登陸指定的格式)

3一、log_format name string …; #日誌格式

Default:log_format combined 「…」;

    Context:http

string可使用nginx核心模塊及其它模塊內嵌的變量;

$bytes_sent:發送到客戶端的字節數

    $connection:鏈接序列號

    $connection_requests:目前一些經過鏈接發出的請求(1.1.18)

    $msec:時間與一個毫秒分辨率秒日誌寫入的時間

    $pipe:」p」若是請求被流水線

    $request_length:請求長度

    $request_time:請求處理時間在毫秒分辨率秒; 第一字節之間通過的時間是從在客戶端和日誌寫入讀出以後,最後的字節被髮送到客戶端

    $status:響應狀態

    $time_iso8601:在ISO 8601標準格式的本地時間

    $time_local:在通用日誌格式的本地時間

===========================================================================

3二、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; #訪問日誌文件路徑,格式及相關的緩衝的配置;

access_log off;

    Default:access_log logs/access.log combined;

    Context:http, server, location, if in location, limit_except

訪問日誌文件路徑,格式及相關的緩衝的配置;

buffer=size

        flush=time

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf

server {
        listen 80;
        server_name www.ilinux.io;
        root /data/nginx/vhost1;
        access_log /var/log/nginx/vhost1_access.log main; 定義在server中,對整個文件有效
[root@nginx1 /etc/nginx/conf.d]#nginx -s reload
[root@nginx1 /etc/nginx/conf.d]#tail /var/log/nginx/vhost1_access.log   查看日誌
172.16.254.217 - tom [14/Jul/2017:22:02:12 +0800] "GET /images/fish.jpg HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
172.16.254.217 - tom [14/Jul/2017:22:04:33 +0800] "GET /images/2560x1600.jpg HTTP/1.1" 404 48 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
172.16.254.217 - tom [14/Jul/2017:22:05:29 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
172.16.254.217 - tom [14/Jul/2017:22:05:43 +0800] "GET /admin/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
對於某個location使用單獨的訪問日誌,以admin爲例

location ~* ^/(admin|login) {
                auth_basic "admin area or login url";
                auth_basic_user_file /etc/nginx/.ngxpasswd;
                access_log /var /log/nginx/vhost1_access.log main;
}

===========================================================================

3三、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; #緩存各日誌文件相關的元數據信息;

open_log_file_cache off;

    Default:open_log_file_cache off;

    Context:http, server, location

緩存各日誌文件相關的元數據信息;

max:緩存的最大文件描述符數量;

        min_users:在inactive指定的時長內訪問大於等於此值方可被看成活動項;

        inactive:非活動時長;

        valid:驗正緩存中各緩存項是否爲活動項的時間間隔;

===========================================================================

經常使用模塊

ngx_http_gzip_module:

The ngx_http_gzip_module module is a filter that compresses responses using the 「gzip」 method. This often helps to reduce the size of transmitted data by half or even more.(ngx_http_gzip_module模塊是一個過濾器,壓縮響應使用「gzip」方法。這一般有助於將傳輸數據的大小減小一半甚至更多。)

一、gzip on | off;

Default: gzip off;

Context: http, server, location, if in location

Enables or disables gzipping of responses.(啓用或禁用Gzipping反應)

是否啓用gzip壓縮響應報文;不是全部瀏覽器都支持壓縮機制

===========================================================================

二、gzip_comp_level level;

Default: gzip_comp_level 1;

Context: http, server, location

Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.(設置一個響應的gzip壓縮級別。可接受的值在1到9之間。默認爲1,數壓越大壓縮比越大)

===========================================================================

三、gzip_disable regex …;

Default: —

Context: http, server, location

Disables gzipping of responses for requests with 「User-Agent」 header fields matching any of the specified regular expressions.(禁用Gzipping響應「用戶代理標頭字段匹配任何指定的正則表達式的要求)

regex是匹配客戶端瀏覽器類型的模式,表示對全部匹配到的瀏覽器不執行壓縮響應;由於有些瀏覽器類型不支持壓縮

===========================================================================

四、gzip_min_length length;

Default: gzip_min_length 20;

Context: http, server, location

啓用壓縮功能的響應報文大小閾值

===========================================================================

五、gzip_buffers number size;

Default: gzip_buffers 32 4k|16 8k;

Context: http, server, location

支持實現壓縮功能時爲其配置的緩衝區數量及每一個緩存區的大小

===========================================================================

六、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;

Default: gzip_proxied off;

Context: http, server, location

nginx做爲代理服務器接收到從被代理服務器發送的響應報文後,在何種條件下啓用壓縮功能的

off:對代理的請求不啓用

expired:若是響應報文首部包含expired字段並有值,其值便是有效的但過時了,由於禁用了緩存機制,則啓用壓縮

no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值爲此三者中任何一個,則啓用壓縮功能

===========================================================================

七、gzip_types mime-type …;

Default: gzip_types text/html;

Context: http, server, location

壓縮過濾器,僅對此處設定的MIME類型的內容啓用壓縮功能;默認爲text/html

示例:

gzip on;

gzip_comp_level 6;

gzip_min_length 64;

gzip_proxied any;

gzip_types text/xml text/css application/javascript

例:

[root@nginx1 /etc/nginx]#vim nginx.conf
gzip on;
gzip_comp_level 6; #壓縮級別爲6
gzip_types text/css text/xml application/javascript #對text/css text/xml application/javascript這三種進行壓縮
[root@nginx1 /etc/nginx]#vim nginx.conf
gzip on;
gzip_comp_level 6; #壓縮級別爲6
gzip_types text/html text/css text/xml application/javascript #對text/html text/css text/xml application/javascript這四種進行壓縮
[root@nginx1 /etc/nginx]#nginx -s reload
[root@nginx1 /etc/nginx]#cp nginx.conf /data/nginx/vhost1/nginx.html

clipboard.png

===========================================================================

ngx_http_ssl_module模塊:

ssl協議位於傳輸層和應用層之間的半層;應用層協議在開發時調用ssl功能,就能支持ssl,有些應用層協議在調用ssl時,可把ssl當作一個模塊,用到時就能夠調用;就像httpd,可提供http服務,也可提供https服務;只不過,若是是基於rpm安裝方式時,須要安裝mod_ssl模塊;

ssl協議是基於tcp通訊的,通過tcp3次握手後,才能進行sslhandshake;

服務器發證書給客戶端,包括支持哪些加密算法,與客戶端協商;客戶端接收後證書後,要驗證證書持有者與訪問主機站點地址是否一致,證書的頒發機構是不是信任的機構,驗證證書的有效期,用CA公鑰解密數字簽名,用一樣的算法加密特徵碼,對比是否一致,驗證CA的合法性;還要檢查證書吊銷列表;驗證經過後,才通訊;但通訊時,還要有密鑰交換的過程,用對方的公鑰加密選擇的一次性對稱密鑰,而後傳遞給對方,對方用私鑰解密後,就得出了密碼,而後就用這個密碼來加密客戶端請求的資源以後,將資源發送給客戶端,隨後就是ssl雙方之間的通訊;

這個通訊是基於ssl會話進行的,全部http報文在發送給tcp層以前,先交給ssl層,ssl層會把文本形式的報文,轉換爲ssl報文,ssl報文是爲二進制格式的;隨後才交給tcp層;所以基於ssl層的會話,可認爲是在整個報文多了一層,即數據以外是應用層,應用層以外是ssl會話層,而後纔是tcp層,最後通過封裝MAC發送;

運營商能截獲客戶端的訪問頁面,插入相關的連接或廣告,站點有可能都不知道;在cdn層次上分析客戶的訪問;所以,站點如今都作全站https,這樣,再運營商插入廣告,客戶就打不開網頁,從而,運營商爲了知足客戶端打開網頁的需求,就不能插入廣告了;

ssl會話是基於tcp隧道承載的一種協議,是在tcp創建鏈接以後,才創建的;而在拆除會話時,是先拆除ssl會話,再拆除tcp鏈接;

ssl加解密會給cpu帶來很大壓力;未來作服務器時,要作選型;軟硬件模型多服務器作壓測,要知足業務須要;客戶端使用域名訪問服務器站點,經過DNS服務器解析返回一個請求的要訪問服務器ip地址,以後,客戶端就封裝http請求報文,http報文基於get方法,body部分通常是空的,再外面封裝的是http請求報文首部,當中有大多請求報文的header,其中有一個header叫作host,這個host給的就是在瀏覽器中鍵入的主機名;再封裝tcp等等;域名只在http請求報文首部纔用到,而首部是在ssl會話內部的;因此兩臺主機間通訊tcp會話是基於ip地址進行,ssl會話也是基於ip地址進行的;雙方身份識別是基於ip地址,而沒有用到主機名;因此,任何一臺服務器只有一個IP地址的主機,只能提供一個https的虛擬主機;但如今有個開源項目,可以實現單臺主機使用多個https的虛擬主機

灰度模型:服務器上線、下線一批一批來打補丁

一、ssl on | off;

Default: ssl off;

Context: http, server

Enables the HTTPS protocol for the given virtual server.(啓用給定虛擬服務器的HTTPS協議。)

是否啓用當前虛擬主機的ssl

手動測試時,可臨時關閉

基於ip地址的ssl會話,在一個ip上進行只能一個虛擬主機ssl會話

===========================================================================

二、ssl_certificate file;

Default: —

Context: http, server

當前虛擬主機使用PEM格式的證書文件

===========================================================================

三、ssl_certificate_key file;

Default: —

Context: http, server

指明私鑰文件;當前虛擬主機使用的證書文件中的公鑰配對兒的私鑰文件路徑,PEM格式

===========================================================================

四、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Context: http, server

支持ssl協議版本,默認爲後三個;最好使用TLSv1以上的版本

===========================================================================

五、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

Default: ssl_session_cache none;

Context: http, server

builtin[:size]:使用OpenSSL內建的緩存,此緩存爲每worker進程私有;

[shared:name:size]:在各worker之間使用一個共享的緩存;

ssl會話建立很是消耗資源,能緩存下來對同一主機的屢次請求,在有效時間內可不用創建ssl會話,基於緩存來實現;指明ssl會話的緩存機制;

off:禁止使用會話;堅定禁止;

none:禁止使用會話;溫和禁止;告訴客戶端會話有可能被重用,但並不保證;

builtin:使用openssl(加密的庫)內建的緩存機制,此爲各worker獨佔;

爲每一個worker進程在本身的空間中加載ssl相關庫,各worker是不共享的;每一個worker本身獨立管理本身的ssl會話緩存;

缺陷:同一個用戶請求,第一個請求調度在第一個worker響應,第二個請求有可能被調度到第二個worker響應,這樣緩存有可能沒法被命中;

shared:相對於builtin而言,ssl緩存是由各worker共享的緩存;緩存空間須要定義name,size等,每一個共享必須有名字;共享的緩存由nginx進程所管理的一段內存空間,對於nginx,共享內存空間很是多,因此共享內存空間要有名字和空間大小;

name:緩存空間的名稱;每一段空間間必須有一個名字;

size:字節爲單位的緩存空間的大小,每1MB內存空間可緩存4000個會話;10M空間就可緩存4萬個會話;通常只使用共享,效率會高些;多個虛擬主機可以使用同一段緩存空間來緩存本身的ssl會話

===========================================================================

六、ssl_session_timeout time;

Default: ssl_session_timeout 5m;

Context: http, server

客戶端一側的鏈接能夠複用ssl session cache中緩存的ssl參數的有效時長;ssl會話超時時長,默認是5分鐘

配置示例:

server {

listen 443 ssl;     ————————-強制ssl會話

 server_name localhost; ——————虛擬主機名

 ssl_certificate cert.pem; —————–證書

 ssl_certificate_key cert.key;————-私鑰

 ssl_session_cache shared:SSL:1m; —-共享ssh緩存大小

 ssl_session_timeout 5m; —————–會話ssl的超時時長

 ssl_ciphers HIGH:!aNULL:!MD5; ——–ssl的加密算法

 ssl_prefer_server_ciphers on; ———–傾向於使用服務器端的加密算法

 location / {

 root html;

 index index.html index.htm;

}

===========================================================================

ngx_http_rewrite_module模塊:

The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions, return redirects, and conditionally select configurations.(ngx_http_rewrite_module模塊使用PCRE正則表達式,變動請求URI返回重定向,並有條件地選擇配置。)

用於實現將用戶請求的URI基於正則式轉換爲其它URl機制;而且以重定向方式默認返回給客戶端,讓客戶端對新的URI從新再次發起請求

處理步驟:

在server當中,使用rewrite指令定義的重寫機制是自上而下逐條進行處理的,相似於iptables的規則都是自上而下應用設置的;若是被第一條處理,下面不會再檢查;由於處理過了已經返回給客戶端,客戶端已經再次請求新URI了。

將用戶請求的URI基於regex所描述的模式進行檢查,然後完成替換

執行過程會重複以下操做:

(1)基於用戶請求的URI去搜索location;

(2)在一個location內部的指令,是從上而下逐條檢查;

(3)若是URI被重寫循環重複,最多10次,就會提示錯誤頁面

(4)用戶請求到達nginx服務器端時,服務端有多個server虛擬主機,映射到哪一個server,取決於用戶請求的server name,根據用戶請求的server name最終被判斷到底請求的是哪一個server,從而判斷屬於哪一個server,每一個srever內部還有多個location,每一個location用來定義URL到本地文件系統路徑的映射方式以及內部處理機制;所以,還有根據用戶請求的URL去匹配location;因此,這裏有2步操做:

第一步,根據server name匹配是哪一個server,

第二步,根據用戶請求的URL去匹配server內部的location;在一個location內部可能存在多個rewrite指令,rewrite指令做用就是把用戶請求的URL換成其它的URL;

例如:用戶請求的是http://server2/hello.htm,被匹配到第二個srever上,其中location中若是第一條rewrite指令,指明瞭把hello.html指向了hi.html;則返回給客戶端去請求http://server2/hi.html,然後客戶端要從新再次發請求,依然自上而下去匹配屬於哪一個server、哪一個location;若是hi.html被第三location匹配則被location中的指令處理

例:循環重寫示例:

rewrite (.*).jpg$ –> $1.html;

rewrite (.*).html$ –> $1.jpg;

寫的規則次序很重要:根據用戶請求的主機名來判斷是哪一個server;肯定server後,根據location完成搜索,根據location中的重寫規則完成重寫,重寫後,返回客戶端一個新的URL,客戶端再次發請求;若是中間出現循環最大循環10此;URL重寫可實現跨server,例如請求http://server2/images/1.jpg,改寫爲http://images/$1.html,這個images多是其它虛擬主機,甚至還多是另外一臺物理服務器;

全部URL重寫,可在一個主機上的一個server內只把URL部分重寫,但有時能夠把server重寫,實現鏡像服務器;把裏面的服務器地址改了,可是URL沒改;

URL重寫可把對應動態資源的請求轉換爲靜態的URL地址;所以,這個結果可被搜索引擎收錄,還可被緩存服務器緩存;可理解爲把動態資源靜態化的效果;

若是用戶訪問的php動態資源,不少時候緩存服務器是不緩存這個結果的,可是若是動態資源生成的結果不會再變化能夠緩存服務器緩存下來時(靜態的存下來),能夠給靜態URL;這種機制可在nginx的rewrite功能來實現;但用到正則式就要啓動正則表達式引擎,這樣會消耗更多資源;所以,儘可能不使用

一、rewrite regex replacement [flag]

將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換爲replacement指定的新的URI;

注意:若是在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會從新一輪的替換檢查,所以,隱含有循環機制;[flag]所表示的標誌位用於控制此循環機制;

若是replacement是以http://https://開頭,則替換結果會直接以重向返回給客戶端;

301:永久重定向;

[flag]:

last:重寫完成後中止對當前URI在當前location中後續的其它重寫操做,然後對新的URI啓動新一輪重寫檢查;提早重啓新一輪循環;

break:重寫完成後中止對當前URI在當前location中後續的其它重寫操做,然後直接跳轉至重寫規則配置塊以後的其它配置;結束循環;

redirect:重寫完成後以臨時重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端從新發起請求;不能以http://https://開頭;

permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端從新發起請求;

若是第一條規則被last匹配了,意味着新的URI會從新作一次請求,nginx會在內部自動從新檢查,若是又被這個location匹配,還會再檢查一遍;最終將資源加載後返回給客戶端;

若是第一條規則被break匹配,rewrite中止在第一條中的新URI上,意味着再也不被執行重寫指令即跳出循環,nginx會在內部而繼續執行此location內的其它指令;最終將資源加載後返回給客戶端;

若是第一條規則被redirect匹配,直接將新URL返回給客戶端,瀏覽器自動對新URL發請求,這個新URL有可能仍是本機中location,再解析匹配檢查,因此,redirect直接返回的不是資源,而是一個新的URL;

但redirect和permanent,表示當用戶請求的URL被重定向時,直接返回用戶新的URL,讓用戶本身從新請求,只不過這二者的區別爲,redirect是臨時重定向,permanent是永久重定向;

注意:last和break都是nginx自動的在內部進行後續處理;

redirect和permanent是nginx返回URL給客戶端瀏覽器自動從新請求的

注意:

(1)在同一location中存在多個rewrite規則會自上而下逐個被檢查(隱含循環);可以使用flag控制此循環功能;

(2)若是replacement是以http://https://開頭,則替換結果會直接以重定向方式返回給客戶端;

(3)若是replacement不是以http://https://開頭,將會按次序,依次讀取規則,全部規則都處理完成後,把最終結果返回客戶端,而不是被某條規則重寫後當即返回客戶端;

(4)查找時可以使用模式,替換爲的內容不能使用模式,但可以使用後向引用,在nginx中不使用1,是使用$1來表示引用;

(5) 若是在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會從新一輪的替換檢查,所以,隱含有循環機制;[flag]所表示的標誌位用於控制此循環機制;

(6)rewrite指令的執行次序,就是寫在配置文件中的次序,若是重寫時一個規則依次向下循環匹配不少規則時,可以使用flag中的break在指定的規則上中止循環,完成最終重寫。

例:(1)無錯誤頁面重寫

]# vim /etc/nginx/nginx.conf
location / {
index index.html;
rewrite (.)/..?.* $1/index.html break;
}
結論:不管用戶輸入什麼資源,都會重寫到index.html頁面

(2)定義死循環

]# vim /etc/nginx/nginx.conf
location / {
index index.html;
rewrite (.*)\.txt $1.html;
rewrite (.*)\.html $1.txt;
}
結論:瀏覽器輸入http://10.1.1.25/index.txt時,服務器響應碼爲500(服務器內部錯誤),此時在兩條重寫規則任意一條中添加break便可終止循環。

https://www/ilinux.io/images/fish.png—>https://www/ilinux.io/images/fish.jpg

[root@nginx1 /etc/nginx]#vim conf.d/vhost1.conf
server {
        rewrite /(.*)\.png$ /$1.jpg;#只要請求的類型是以.png結尾的,都改成.jpg
[root@nginx1 /etc/nginx]#nginx -t
[root@nginx1 /etc/nginx]#nginx -s reload
[root@nginx1 /etc/nginx]#ls /data/pictures/
fish.jpg  flake.jpg  images
訪問png圖片,顯示jpg圖片

===========================================================================

http://www/ilinux.io—>https://www/ilinux.io

將用戶訪問80端口時改成8080

[root@nginx1 /etc/nginx/conf.d]#vim vhost1.conf
server {

#rewrite /(.*)\.png$ /$1.jpg;
    rewrite /(.*)$ https://www/ilinux.io/$1;  #不管用戶請求任何內容,都改成https://www/ilinux.io/$1

===========================================================================

二、return

return code [text];

return code URL;

return URL;

Default: —

Context: server, location, if

Stops processing and returns the specified code to a client. (中止處理並將指定的代碼返回給客戶機。)

===========================================================================

三、rewrite_log on | off;

Default: rewrite_log off;

Context: http, server, location, if

是否開啓重寫日誌;啓用時,日誌信息被髮往錯誤日誌

===========================================================================

四、if (condition) { … }

Default: —

Context: server, location

引入一個新的配置上下文 ;條件知足時,執行配置塊中的配置指令;server, location;

condition:

比較操做符:

等值比較和不等值比較: == !=

~:模式匹配,左側字符串是否能被右側模式匹配,區分字母大小寫

~*:模式匹配,左側字符串是否能被右側模式匹配,不區分字符大小寫

!~:模式不匹配,左側字符串是否不能被右側模式匹配,區分字符大小寫

!~*:模式不匹配,左側字符串是否不能被右側模式匹配,不區分字符大小寫

文件及目錄存在性判斷:

-f|!-f:存在且類型爲文件,歎號表示取反

-d|!d:判斷爲目錄

-e|!-e:判斷存在

-x|!-x:判斷執行權限

例:(1)定義只容許瀏覽器類型爲Chrome和Firefox時,才能將.txt重寫爲.html

]#vim /etc/nginx/conf.d/vhost.conf
if ($http_user_agent ~* Chrome|Firefox ) {
rewrite (.*).txt $1.html break;
}
表示:判斷用戶的瀏覽器是否能被Chrome或Firefox匹配,$http_user_agent是其它模塊引入的變量

(2)定義若是用戶請求方法爲post時,返回錯誤代碼及提示給用戶

if ($request_method = POST) {

return 405 「Sorry」;

}

(3)定義用戶訪問的uri中帶有admin字樣就返回錯誤代碼及提示給用戶

]# vim /etc/nginx/nginx.conf
if ($uri ~ .admin,*) {
return 403 "go away";
}
結論:(1)瀏覽器輸入:www.ilinux.io/admin.html,顯示:go away,響應碼仍是403

(2)返回指定的錯誤代碼不受自定義的錯誤代碼響應頁面影響

===========================================================================

五、set $variable value;

Default: —

Context: server, location, if

用戶自定義變量,在nginx中變量不管在定義仍是引用都要使用$符號

===========================================================================

六、break

語法:Syntax: break;

Default: —

Context: server, location, if

中止處理當前ngx_http_rewrite_module指令集。

===========================================================================

ngx_http_referer_module模塊:

The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the 「Referer」 header field. (ngx_http_referer_module模塊是用來阻止訪問一個在referer頭域值無效請求的網站,基於引用作訪問控制;表示從哪一個連接跳轉到當前頁面)

一、valid_referers none | blocked | server_names | string …;

可實現防盜鏈拒絕訪問,拒絕來自某連接到本網頁等功能

定義referer首部的合法可用值;

none:請求報文首部沒有referer首部;

blocked:請求報文的referer首部沒有值;

server_names:參數,其能夠有值做爲主機名或主機名模式;

arbitrary_string:直接字符串,但可以使用*做通配符;

regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*.rookie.com;

配置示例:

valid_referers none block server_names .rookie.com .rookie.com rookie. rookie. ~.rookie.;除這些之外的都是非法引用
if($invalid_referer) {
return 403;
}
其中,$invalid_referer是內嵌變量,表示只有不能被valid_refers指令匹配到的頭被歸類到invalid_referer;直接調用$invalid_referer變量便可

===========================================================================

ngx_http_proxy_module模塊:

The ngx_http_proxy_module module allows passing requests to another server.

ngx_http_proxy_module模塊容許傳遞請求到另外一個服務器。

一、proxy_pass URL;

Default:—

Context:location, if in location, limit_except

注意:proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端主機

server {
...
server_name HOSTNAME;
location /uri/ {
proxy http://hos[:port];
}
...
}
http://HOSTNAME/uri –> http://host/uri

proxy_pass後面的路徑是一個uri時,其會將location的uri替換爲proxy_pass的uri

server {
...
server_name HOSTNAME;
location /uri/ {
proxy http://host/new_uri/;
}
...
}
http://HOSTNAME/uri/ –> http://host/new_uri/

若是location定義其uri時使用了正則表達式的模式,或在if語句或limt_execept中使用proxy_pass指令,則proxy_pass以後必須不能使用uri; 用戶請求時傳遞的uri將直接附加代理到的服務的以後;

server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
proxy http://host;
}
...
}
http://HOSTNAME/uri/ –> http://host/uri/

===========================================================================

二、proxy_set_header field value;

設定發日後端主機的請求報文的請求首部的值;Context: http, server, location

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

===========================================================================

三、proxy_cache_path;

定義可用於proxy功能的緩存;Context:http

proxy_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]

===========================================================================

四、proxy_cache zone | off;

指明要調用的緩存,或關閉緩存機制;Context: http, server, location

===========================================================================

五、proxy_cache_key string;

緩存中用於「鍵」的內容;

默認值:proxy_cache_key $scheme$proxy_host$request_uri

===========================================================================

六、proxy_cache_valid [code …] time;

定義對特定響應碼的響應內容的緩存時長;

定義在http{…}中;

proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;

定義在須要調用緩存功能的配置段,例如server{…};

proxy_cache pxycache;

proxy_cache_key $request_uri;

proxy_cache_valid 200 302 301 1h;

proxy_cache_valid any 1m

===========================================================================

七、proxy_cache_use_stale

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …;

Determines in which cases a stale cached response can be used when an error occurs during communication with the proxied server.(在這種狀況下,不肯定緩存的響應能夠用代理服務器的通訊過程當中出現錯誤時使用。)

===========================================================================

八、proxy_cache_methods GET | HEAD | POST …;

If the client request method is listed in this directive then the response will be cached. 「GET」 and 「HEAD」 methods are always added to the list, though it is recommended to specify them explicitly. (若是在這個指令中列出客戶機請求方法,那麼響應將被緩存。「GET」和「HEAD」方法老是添加到列表中,但建議顯式地指定它們。)

===========================================================================

九、proxy_hide_header field;

By default, nginx does not pass the header fields 「Date」, 「Server」, 「X-Pad」, and 「X-Accel-…」 from the response of a proxied server to a client. The proxy_hide_header directive sets additional fields that will not be passed.(默認狀況下,nginx不經過頭字段「日期」、「服務器」、「X-PAD」、和「x-accel -…「從響應一個代理服務器的客戶端。proxy_hide_header指令集的附加字段那不會被經過。)

===========================================================================

十、proxy_connect_timeout time; 默認爲60s

Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.(定義了用於創建與代理服務器鏈接超時。須要注意的是,這個超時一般不能超過75秒。)

===========================================================================

ngx_http_headers_module模塊

The ngx_http_headers_module module allows adding the 「Expires」 and 「Cache-Control」 header fields, and arbitrary fields, to a response header.(ngx_http_headers_module模塊容許添加「過時」和「緩存控制頭字段,和任意的領域,一個響應頭。)

向由代理服務器響應給客戶端的響應報文添加自定義首部,或修改指定首部的值

一、add_header name value [always];

添加自定義首部;

add_header X-Via $server_addr;

add_header X-Accel $server_name;

===========================================================================

二、expires [modified] time;

expires epoch | max | off;

用於定義Expire或Cache-Control首部的值

===========================================================================

ngx_http_fastcgi_module模塊:

The ngx_http_fastcgi_module module allows passing requests to a FastCGI server.(ngx_http_fastcgi_module模塊容許經過請求FastCGI服務器。)

一、fastcgi_pass address;

Default: —

Context: location, if in location

fastcgi服務器IP地址

===========================================================================

二、fastcgi_index name;

Default: —

Context: http, server, location

fastcgi默認的主頁資源

===========================================================================

三、fastcgi_param parameter value [if_not_empty];

Default: —

Context: http, server, location

Sets a parameter that should be passed to the FastCGI server. The value can contain text, variables, and their combination.(設置一個參數,應經過FastCGI服務器。該值能夠包含文本、變量和它們的組合。)

配置示例1:

前提:配置好fpm server和mariadb-server服務

安裝php-fpm和mysql

yum -y install php-fpm mariadb-server

Nginx配置文件

location ~* \.php$ {
root           /usr/share/nginx/html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
include        fastcgi_params;
}
配置示例2:經過/pm_status和/ping來獲取fpm server狀態信息;

location ~* ^/(pm_status|ping)$ {
include        fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
}

===========================================================================

四、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的緩存;緩存位置爲磁盤上的文件系統,由path所指定路徑來定義;

levels=levels:緩存目錄的層級數量,以及每一級的目錄數量;levels=ONE:TWO:THREE

leves=1:2:2

keys_zone=name:size

k/v映射的內存空間的名稱及大小

inactive=time

非活動時長

max_size=size

磁盤上用於緩存數據的緩存空間上限

===========================================================================

五、fastcgi_cache zone | off;

Default: fastcgi_cache off;

Context: http, server, location

調用指定的緩存空間來緩存數據

===========================================================================

六、fastcgi_cache_key string;

Default: —

Context: http, server, location

定義用做緩存項的key的字符串

===========================================================================

七、fastcgi_cache_methods GET | HEAD | POST …;

Default: fastcgi_cache_methods GET HEAD;

Context: http, server, location

爲哪些請求方法使用緩存

===========================================================================

八、fastcgi_cache_min_uses number;

Default: fastcgi_cache_min_uses 1;

Context: http, server, location

緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認做活動項

===========================================================================

九、fastcgi_cache_valid [code …] time;

Default: —

Context: http, server, location

不一樣的響應碼各自的緩存時長;

示例:

http {
...
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
...
server {
...
location ~* \.php$ {
...
fastcgi_cache fcgi;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
...
}
...
}
...
}

===========================================================================


十、fastcgi_keep_conn on | off;

 Default: fastcgi_keep_conn off;

 Context: http, server, location

By default, a FastCGI server will close a connection right after sending the response. However, when this directive is set to the value on, nginx will instruct a FastCGI server to keep connections open.(默認狀況下,一個FastCGI服務器將發送響應後關閉鏈接正確。然而,當這個指令設置的值,Nginx會指示一個FastCGI服務器保持鏈接打開。)


  [1]: /img/bVTI0Z
相關文章
相關標籤/搜索