国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

精通Nginx(二)

nidaye / 1474人閱讀

摘要:?jiǎn)⒂没蚪梅磻?yīng)是否啟用壓縮響應(yīng)報(bào)文不是所有瀏覽器都支持壓縮機(jī)制設(shè)置一個(gè)響應(yīng)的壓縮級(jí)別。可接受的值在到之間。

博文參考
http://wiki.nginx.org/HttpUpstreamConsistentHash
http://wiki.nginx.org/HttpUpstreamFairModule
http://wiki.nginx.org/HttpUpstreamRequestHashModule
http://www.web-polygraph.org/
架構(gòu)模型


核心配置 與套接字相關(guān)的配置:

1、server { … } #配置一個(gè)虛擬主機(jī);

        Default:—

        Context:http

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

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

2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE #定義虛擬主機(jī)所監(jiān)聽(tīng)的端口

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

    Default:listen *:80 | *:8000;

    Context:server

default_server:設(shè)定為默認(rèn)虛擬主機(jī);

ssl:限制僅能夠通過(guò)ssl連接提供服務(wù);

backlog=number:后援隊(duì)列長(zhǎng)度;

rcvbuf=size:接收緩沖區(qū)大??;

sndbuf=size:發(fā)送緩沖區(qū)大小

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

3、server_name name …; #指明虛擬主機(jī)的主機(jī)名稱;后可跟多個(gè)由空白字符分隔的字符串;

    Default:server_name “”;

    Context:server

指明虛擬主機(jī)的主機(jī)名稱;后可跟多個(gè)由空白字符分隔的字符串;

支持通配任意長(zhǎng)度的任意字符;server_name .rookie.com www.rookie.*

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

匹配機(jī)制:

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

(2) 左側(cè)*通配符

(3) 右側(cè)*通配符

(4) 正則表達(dá)式

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

4、tcp_nodelay on | off; #在keepalived模式下的連接是否啟用TCP_NODELAY選項(xiàng);將多個(gè)小包打包成一個(gè)報(bào)文發(fā)送給客戶端

tcp_nopush on|off;

在sendfile模式下,是否啟用TCP_CORK選項(xiàng)

    Default:tcp_nodelay on;

    Context:http, server, location

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

5、sendfile on | off; #是否啟用sendfile功能;

    Default:sendfile off;

    Context:http, server, location, if in location

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

定義路徑相關(guān)的配置:

6、root path; #設(shè)置web資源路徑映射;用于指明用戶請(qǐng)求的url所對(duì)應(yīng)的本地文件系統(tǒng)上的文檔所在目錄路徑;可用的位置:http, server, location, if in location

    Default:root html;

    Context:http, server, location, if in location

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

7、location [ = | ~ | ~* | ^~ ] uri { … } #在一個(gè)server中l(wèi)ocation配置段可存在多個(gè),用于實(shí)現(xiàn)從uri到文件系統(tǒng)的路徑映射;ngnix會(huì)根據(jù)用戶請(qǐng)求的URI來(lái)檢查定義的所有l(wèi)ocation,并找出一個(gè)最佳匹配,而后應(yīng)用其配置

location @name { … }

    Default:—

    Context:server, location

=:對(duì)URI做精確匹配;例如, http://www.rookie.com/, http://www.rookie.com/index.html

        location = / {

            …

        }

~:對(duì)URI做正則表達(dá)式模式匹配,區(qū)分字符大小寫(xiě)

~*:對(duì)URI做正則表達(dá)式模式匹配,不區(qū)分字符大小寫(xiě)

^~:對(duì)URI的左半部分做匹配檢查,不區(qū)分字符大小寫(xiě)

不帶符號(hào):匹配起始于此uri的所有的url

匹配優(yōu)先級(jí):=, ^~, ~/~*,不帶符號(hào)

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

8、alias path; #定義路徑別名,文檔映射的另一種機(jī)制;僅能用于location上下文

    Syntax: alias path;

    Default:—

    Context:location

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

(a) root,給定的路徑對(duì)應(yīng)于location中的/uri/左側(cè)的/

(b) alias,給定的路徑對(duì)應(yīng)于location中的/uri/右側(cè)的/

/下除禁止172.16.252.245訪問(wèn)外,其它都允許

[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訪問(wèn)
                allow all;                           #其它都允許
        }
}
[root@nginx2 ~]#vim /etc/hosts           #做域名解析
172.16.254.217  www.ilinux.io
[root@nginx2 ~]#curl http://www.ilinux.io

403 Forbidden

403 Forbidden


nginx/1.10.2

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

禁止172.16.252.245訪問(wèn)所有jpg|png結(jié)尾格式的圖片

[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訪問(wèn)所有jpg|png結(jié)尾格式的圖片
                allow all;                        #其余的都允許訪問(wèn)
        }
}
[root@nginx2 ~]#curl http://www.ilinux.io    # 因?yàn)椴皇窃L問(wèn)jpg|png結(jié)尾格式的圖片,所以能顯示內(nèi)容

Nginx Vhost1

[root@nginx1 /data/nginx/vhost1]#find /usr/share/ -iname "*.jpg" -exec cp {} ./ ; # 拷貝圖片到當(dāng)前路徑下 ![clipboard.png](/img/bVTIWl) [root@nginx2 ~]#curl http://www.ilinux.io/leaf.jpg 403 Forbidden

403 Forbidden


nginx/1.10.2

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

相對(duì)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;     #相對(duì)于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

vhost2

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

[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/;相當(dāng)于在/下找images
    }

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

[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

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

[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/;
    }

}

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

9、index file …; #默認(rèn)主頁(yè)面定義

    Default:index index.html;

    Context:http, server, location

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

10、error_page code … [=[response]] uri; #定義默認(rèn)錯(cuò)誤頁(yè)面

    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 {               #如果訪問(wèn)notfound.html
            root /data/nginx/error_pages;    #錯(cuò)誤頁(yè)面就在/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

--------------------


notfound


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

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

11、try_files file … uri;

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

定義客戶端請(qǐng)求的相關(guān)配置:

12、keepalive_timeout timeout [header_timeout]; #設(shè)定保持連接的超時(shí)時(shí)長(zhǎng),0表示禁止長(zhǎng)連接;默認(rèn)為75s

    Default:keepalive_timeout 75s;

    Context:http, server, location

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

13、keepalive_requests number; #在一次長(zhǎng)連接上所允許請(qǐng)求的資源的最大數(shù)量,默認(rèn)為100(使用默認(rèn)值即可)

    Default:keepalive_requests 100;

    Context:http, server, location

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

14、keepalive_disable none | browser …; #對(duì)哪種瀏覽器禁用長(zhǎng)連接

    Default:keepalive_disable msie6;

    Context:http, server, location

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

15、send_timeout time; #向客戶端發(fā)送響應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng),是指兩次寫(xiě)操作之間的間隔時(shí)長(zhǎng)

如客戶端發(fā)送請(qǐng)求后,由于斷電等等原因,無(wú)法接收到服務(wù)器發(fā)送的報(bào)文

    Default:send_timeout 60s;

    Context:http, server, location

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

16、client_body_buffer_size size; #用于接收客戶端請(qǐng)求報(bào)文的body部分的緩沖區(qū)大??;默認(rèn)為16k;超出此大小時(shí),其將被暫存到磁盤(pán)上的由client_body_temp_path指令所定義的位置

    Default:client_body_buffer_size 8k|16k;

    Context:http, server, location

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

17、client_body_temp_path path [level1 [level2 [level3]]]; #設(shè)定用于存儲(chǔ)客戶端請(qǐng)求報(bào)文的body部分的臨時(shí)存儲(chǔ)路徑及子目錄結(jié)構(gòu)和數(shù)量

    Default:client_body_temp_path client_body_temp;

    Context:http, server, location

16進(jìn)制的數(shù)字

client_body_temp_path /var/tmp/client_body 2 1 1

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

1:表示用一位16進(jìn)制數(shù)字表示一級(jí)子目錄;0-f

2:表示用2位16進(jìn)程數(shù)字表示二級(jí)子目錄:00-ff

2:表示用2位16進(jìn)程數(shù)字表示三級(jí)子目錄:00-ff

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

對(duì)客戶端進(jìn)行限制的相關(guān)配置:

18、limit_rate rate; #限制響應(yīng)給客戶端的傳輸速率,單位是bytes/second,0表示無(wú)限制

    Default:limit_rate 0;

    Context:http, server, location, if in location

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

19、limit_except method … { … } #限制對(duì)指定的請(qǐng)求方法之外的其它方法的使用客戶端

    Default:—

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

        allow 192.168.1.0/32;      #只允許192.168.1.0/32網(wǎng)段使用

        deny  all;

    }       

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

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

    Default:aio off;

    Context:http, server, location

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

21、directio size | off; #在Linux主機(jī)啟用O_DIRECT標(biāo)記,此處意味文件大于等于給定的大小時(shí)使用,例如directio 4m

    Default:directio off;

    Context:http, server, location

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

22、open_file_cache off; # 是否開(kāi)啟緩存

    open_file_cache max=N [inactive=time];

    Default:open_file_cache off;

    Context:http, server, location
nginx可以緩存以下三種信息

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

(2) 打開(kāi)的目錄結(jié)構(gòu)

(3) 沒(méi)有找到的或者沒(méi)有權(quán)限訪問(wèn)的文件的相關(guān)信息

max=N:可緩存的緩存項(xiàng)上限;達(dá)到上限后會(huì)使用LRU(最近最少使用)算法實(shí)現(xiàn)緩存管理

inactive=time:緩存項(xiàng)的非活動(dòng)時(shí)長(zhǎng),在此處指定的時(shí)長(zhǎng)內(nèi)未被命中的或命中的次數(shù)少于open_file_cache_min_users指令所指定的次數(shù)的緩存項(xiàng)即為非活動(dòng)項(xiàng)

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

23、open_file_cache_valid time; #緩存項(xiàng)有效性的檢查頻率;默認(rèn)為60s(空間不夠用可將秒數(shù)調(diào)低)

    Default:open_file_cache_valid 60s;

    Context:http, server, location

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

24、open_file_cache_min_uses number; #在open_file_cache指令的inactive參數(shù)指定的時(shí)長(zhǎng)內(nèi),至少應(yīng)該被命中多少次方可被歸類為活動(dòng)項(xiàng)

    Default:open_file_cache_min_uses 1;

    Context:http, server, location

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

25、open_file_cache_errors on | off; #是否緩存查找時(shí)發(fā)生錯(cuò)誤的文件一類的信息(使用on)

    Default:open_file_cache_errors off;

    Context:http, server, location

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

ngx_http_access_module模塊:

實(shí)現(xiàn)基于ip的訪問(wèn)控制功能

26、allow address | CIDR | unix: | all;(允許)

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

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

http, server, location, limit_except

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

ngx_http_auth_basic_module模塊

實(shí)現(xiàn)基于用戶的訪問(wèn)控制,使用basic機(jī)制進(jìn)行用戶認(rèn)證;

28、auth_basic string | off;

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

29、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開(kāi)頭,

            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

admin area

輸入用戶名和密碼后成功進(jìn)入

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

ngx_http_stub_status_module模塊(nginx內(nèi)置的內(nèi)建狀態(tài)頁(yè))

用于輸出nginx的基本狀態(tài)信息;

Active connections: 291

server accepts handled requests

16630948 16630948 31070465

Reading: 6 Writing: 179 Waiting: 106

Active connections: 活動(dòng)狀態(tài)的連接數(shù);

accepts:已經(jīng)接受的客戶端請(qǐng)求的總數(shù);

handled:已經(jīng)處理完成的客戶端請(qǐng)求的總數(shù);

requests:客戶端發(fā)來(lái)的總的請(qǐng)求數(shù);

Reading:處于讀取客戶端請(qǐng)求報(bào)文首部的連接的連接數(shù);

Writing:處于向客戶端發(fā)送響應(yīng)報(bào)文過(guò)程中的連接數(shù);

Waiting:處于等待客戶端發(fā)出請(qǐng)求的空閑連接數(shù);

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

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

ngx_http_log_module模塊

he ngx_http_log_module module writes request logs in the specified format.(ngx_http_log_module模塊寫(xiě)入請(qǐng)求登錄指定的格式)

31、log_format name string …; #日志格式

    Default:log_format combined “…”;

    Context:http

string可以使用nginx核心模塊及其它模塊內(nèi)嵌的變量;

    $bytes_sent:發(fā)送到客戶端的字節(jié)數(shù)

    $connection:連接序列號(hào)

    $connection_requests:目前一些通過(guò)連接發(fā)出的請(qǐng)求(1.1.18)

    $msec:時(shí)間與一個(gè)毫秒分辨率秒日志寫(xiě)入的時(shí)間

    $pipe:”p”如果請(qǐng)求被流水線

    $request_length:請(qǐng)求長(zhǎng)度

    $request_time:請(qǐng)求處理時(shí)間在毫秒分辨率秒; 第一字節(jié)之間經(jīng)過(guò)的時(shí)間是從在客戶端和日志寫(xiě)入讀出之后,最后的字節(jié)被發(fā)送到客戶端

    $status:響應(yīng)狀態(tài)

    $time_iso8601:在ISO 8601標(biāo)準(zhǔn)格式的本地時(shí)間

    $time_local:在通用日志格式的本地時(shí)間

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

32、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; #訪問(wèn)日志文件路徑,格式及相關(guān)的緩沖的配置;

    access_log off;

    Default:access_log logs/access.log combined;

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

訪問(wèn)日志文件路徑,格式及相關(guān)的緩沖的配置;

        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中,對(duì)整個(gè)文件有效
[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" "-"
對(duì)于某個(gè)location使用多帶帶的訪問(wèn)日志,以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;
}

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

33、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; #緩存各日志文件相關(guān)的元數(shù)據(jù)信息;

    open_log_file_cache off;

    Default:open_log_file_cache off;

    Context:http, server, location

緩存各日志文件相關(guān)的元數(shù)據(jù)信息;

        max:緩存的最大文件描述符數(shù)量;

        min_users:在inactive指定的時(shí)長(zhǎng)內(nèi)訪問(wèn)大于等于此值方可被當(dāng)作活動(dòng)項(xiàng);

        inactive:非活動(dòng)時(shí)長(zhǎng);

        valid:驗(yàn)正緩存中各緩存項(xiàng)是否為活動(dòng)項(xiàng)的時(shí)間間隔;

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

常用模塊 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模塊是一個(gè)過(guò)濾器,壓縮響應(yīng)使用“gzip”方法。這通常有助于將傳輸數(shù)據(jù)的大小減少一半甚至更多。)

1、gzip on | off;

Default: gzip off;

Context: http, server, location, if in location

Enables or disables gzipping of responses.(啟用或禁用Gzipping反應(yīng))

是否啟用gzip壓縮響應(yīng)報(bào)文;不是所有瀏覽器都支持壓縮機(jī)制

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

2、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.(設(shè)置一個(gè)響應(yīng)的gzip壓縮級(jí)別??山邮艿闹翟?到9之間。默認(rèn)為1,數(shù)壓越大壓縮比越大)

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

3、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響應(yīng)“用戶代理標(biāo)頭字段匹配任何指定的正則表達(dá)式的要求)

regex是匹配客戶端瀏覽器類型的模式,表示對(duì)所有匹配到的瀏覽器不執(zhí)行壓縮響應(yīng);因?yàn)橛行g覽器類型不支持壓縮

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

4、gzip_min_length length;

Default: gzip_min_length 20;

Context: http, server, location

啟用壓縮功能的響應(yīng)報(bào)文大小閾值

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

5、gzip_buffers number size;

Default: gzip_buffers 32 4k|16 8k;

Context: http, server, location

支持實(shí)現(xiàn)壓縮功能時(shí)為其配置的緩沖區(qū)數(shù)量及每個(gè)緩存區(qū)的大小

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

6、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作為代理服務(wù)器接收到從被代理服務(wù)器發(fā)送的響應(yīng)報(bào)文后,在何種條件下啟用壓縮功能的

off:對(duì)代理的請(qǐng)求不啟用

expired:如果響應(yīng)報(bào)文首部包含expired字段并有值,其值即是有效的但過(guò)期了,因?yàn)榻昧司彺鏅C(jī)制,則啟用壓縮

no-cache, no-store,private:表示從被代理服務(wù)器收到的響應(yīng)報(bào)文首部的Cache-Control的值為此三者中任何一個(gè),則啟用壓縮功能

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

7、gzip_types mime-type …;

Default: gzip_types text/html;

Context: http, server, location

壓縮過(guò)濾器,僅對(duì)此處設(shè)定的MIME類型的內(nèi)容啟用壓縮功能;默認(rèn)為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; #壓縮級(jí)別為6
gzip_types text/css text/xml application/javascript #對(duì)text/css text/xml application/javascript這三種進(jìn)行壓縮
[root@nginx1 /etc/nginx]#vim nginx.conf
gzip on;
gzip_comp_level 6; #壓縮級(jí)別為6
gzip_types text/html text/css text/xml application/javascript #對(duì)text/html text/css text/xml application/javascript這四種進(jìn)行壓縮
[root@nginx1 /etc/nginx]#nginx -s reload
[root@nginx1 /etc/nginx]#cp nginx.conf /data/nginx/vhost1/nginx.html

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

ngx_http_ssl_module模塊:

ssl協(xié)議位于傳輸層和應(yīng)用層之間的半層;應(yīng)用層協(xié)議在開(kāi)發(fā)時(shí)調(diào)用ssl功能,就能支持ssl,有些應(yīng)用層協(xié)議在調(diào)用ssl時(shí),可把ssl當(dāng)做一個(gè)模塊,用到時(shí)就可以調(diào)用;就像httpd,可提供http服務(wù),也可提供https服務(wù);只不過(guò),如果是基于rpm安裝方式時(shí),需要安裝mod_ssl模塊;

ssl協(xié)議是基于tcp通信的,經(jīng)過(guò)tcp3次握手后,才能進(jìn)行sslhandshake;

服務(wù)器發(fā)證書(shū)給客戶端,包括支持哪些加密算法,與客戶端協(xié)商;客戶端接收后證書(shū)后,要驗(yàn)證證書(shū)持有者與訪問(wèn)主機(jī)站點(diǎn)地址是否一致,證書(shū)的頒發(fā)機(jī)構(gòu)是否是信任的機(jī)構(gòu),驗(yàn)證證書(shū)的有效期,用CA公鑰解密數(shù)字簽名,用同樣的算法加密特征碼,對(duì)比是否一致,驗(yàn)證CA的合法性;還要檢查證書(shū)吊銷列表;驗(yàn)證通過(guò)后,才通信;但通信時(shí),還要有密鑰交換的過(guò)程,用對(duì)方的公鑰加密選擇的一次性對(duì)稱密鑰,然后傳遞給對(duì)方,對(duì)方用私鑰解密后,就得出了密碼,然后就用這個(gè)密碼來(lái)加密客戶端請(qǐng)求的資源之后,將資源發(fā)送給客戶端,隨后就是ssl雙方之間的通信;

這個(gè)通信是基于ssl會(huì)話進(jìn)行的,所有http報(bào)文在發(fā)送給tcp層之前,先交給ssl層,ssl層會(huì)把文本形式的報(bào)文,轉(zhuǎn)換為ssl報(bào)文,ssl報(bào)文是為二進(jìn)制格式的;隨后才交給tcp層;因此基于ssl層的會(huì)話,可認(rèn)為是在整個(gè)報(bào)文多了一層,即數(shù)據(jù)之外是應(yīng)用層,應(yīng)用層之外是ssl會(huì)話層,然后才是tcp層,最后經(jīng)過(guò)封裝MAC發(fā)送;

運(yùn)營(yíng)商能截獲客戶端的訪問(wèn)頁(yè)面,插入相關(guān)的鏈接或廣告,站點(diǎn)有可能都不知道;在cdn層次上分析客戶的訪問(wèn);因此,站點(diǎn)現(xiàn)在都做全站https,這樣,再運(yùn)營(yíng)商插入廣告,客戶就打不開(kāi)網(wǎng)頁(yè),從而,運(yùn)營(yíng)商為了滿足客戶端打開(kāi)網(wǎng)頁(yè)的需求,就不能插入廣告了;

ssl會(huì)話是基于tcp隧道承載的一種協(xié)議,是在tcp建立連接之后,才建立的;而在拆除會(huì)話時(shí),是先拆除ssl會(huì)話,再拆除tcp連接;

ssl加解密會(huì)給cpu帶來(lái)很大壓力;將來(lái)做服務(wù)器時(shí),要做選型;軟硬件模型多服務(wù)器做壓測(cè),要滿足業(yè)務(wù)需要;客戶端使用域名訪問(wèn)服務(wù)器站點(diǎn),通過(guò)DNS服務(wù)器解析返回一個(gè)請(qǐng)求的要訪問(wèn)服務(wù)器ip地址,之后,客戶端就封裝http請(qǐng)求報(bào)文,http報(bào)文基于get方法,body部分一般是空的,再外面封裝的是http請(qǐng)求報(bào)文首部,當(dāng)中有大多請(qǐng)求報(bào)文的header,其中有一個(gè)header叫做host,這個(gè)host給的就是在瀏覽器中鍵入的主機(jī)名;再封裝tcp等等;域名只在http請(qǐng)求報(bào)文首部才用到,而首部是在ssl會(huì)話內(nèi)部的;所以兩臺(tái)主機(jī)間通信tcp會(huì)話是基于ip地址進(jìn)行,ssl會(huì)話也是基于ip地址進(jìn)行的;雙方身份識(shí)別是基于ip地址,而沒(méi)有用到主機(jī)名;所以,任何一臺(tái)服務(wù)器只有一個(gè)IP地址的主機(jī),只能提供一個(gè)https的虛擬主機(jī);但現(xiàn)在有個(gè)開(kāi)源項(xiàng)目,能夠?qū)崿F(xiàn)單臺(tái)主機(jī)使用多個(gè)https的虛擬主機(jī)

灰度模型:服務(wù)器上線、下線一批一批來(lái)打補(bǔ)丁

1、ssl on | off;

Default: ssl off;

Context: http, server

Enables the HTTPS protocol for the given virtual server.(啟用給定虛擬服務(wù)器的HTTPS協(xié)議。)

是否啟用當(dāng)前虛擬主機(jī)的ssl

手動(dòng)測(cè)試時(shí),可臨時(shí)關(guān)閉

基于ip地址的ssl會(huì)話,在一個(gè)ip上進(jìn)行只能一個(gè)虛擬主機(jī)ssl會(huì)話

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

2、ssl_certificate file;

Default: —

Context: http, server

當(dāng)前虛擬主機(jī)使用PEM格式的證書(shū)文件

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

3、ssl_certificate_key file;

Default: —

Context: http, server

指明私鑰文件;當(dāng)前虛擬主機(jī)使用的證書(shū)文件中的公鑰配對(duì)兒的私鑰文件路徑,PEM格式

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

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

Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Context: http, server

支持ssl協(xié)議版本,默認(rèn)為后三個(gè);最好使用TLSv1以上的版本

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

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

Default: ssl_session_cache none;

Context: http, server

builtin[:size]:使用OpenSSL內(nèi)建的緩存,此緩存為每worker進(jìn)程私有;

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

ssl會(huì)話創(chuàng)建非常消耗資源,能緩存下來(lái)對(duì)同一主機(jī)的多次請(qǐng)求,在有效時(shí)間內(nèi)可不用建立ssl會(huì)話,基于緩存來(lái)實(shí)現(xiàn);指明ssl會(huì)話的緩存機(jī)制;

off:禁止使用會(huì)話;堅(jiān)決禁止;

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

builtin:使用openssl(加密的庫(kù))內(nèi)建的緩存機(jī)制,此為各worker獨(dú)占;

為每個(gè)worker進(jìn)程在自己的空間中加載ssl相關(guān)庫(kù),各worker是不共享的;每個(gè)worker自己獨(dú)立管理自己的ssl會(huì)話緩存;

缺陷:同一個(gè)用戶請(qǐng)求,第一個(gè)請(qǐng)求調(diào)度在第一個(gè)worker響應(yīng),第二個(gè)請(qǐng)求有可能被調(diào)度到第二個(gè)worker響應(yīng),這樣緩存有可能無(wú)法被命中;

shared:相對(duì)于builtin而言,ssl緩存是由各worker共享的緩存;緩存空間需要定義name,size等,每個(gè)共享必須有名字;共享的緩存由nginx進(jìn)程所管理的一段內(nèi)存空間,對(duì)于nginx,共享內(nèi)存空間非常多,所以共享內(nèi)存空間要有名字和空間大??;

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

size:字節(jié)為單位的緩存空間的大小,每1MB內(nèi)存空間可緩存4000個(gè)會(huì)話;10M空間就可緩存4萬(wàn)個(gè)會(huì)話;一般只使用共享,效率會(huì)高些;多個(gè)虛擬主機(jī)可使用同一段緩存空間來(lái)緩存自己的ssl會(huì)話

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

6、ssl_session_timeout time;

Default: ssl_session_timeout 5m;

Context: http, server

客戶端一側(cè)的連接可以復(fù)用ssl session cache中緩存的ssl參數(shù)的有效時(shí)長(zhǎng);ssl會(huì)話超時(shí)時(shí)長(zhǎng),默認(rèn)是5分鐘

配置示例:

server {

 listen 443 ssl;     ————————-強(qiáng)制ssl會(huì)話

 server_name localhost; ——————虛擬主機(jī)名

 ssl_certificate cert.pem; —————–證書(shū)

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

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

 ssl_session_timeout 5m; —————–會(huì)話ssl的超時(shí)時(shí)長(zhǎng)

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

 ssl_prefer_server_ciphers on; ———–傾向于使用服務(wù)器端的加密算法

 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正則表達(dá)式,變更請(qǐng)求URI返回重定向,并有條件地選擇配置。)

用于實(shí)現(xiàn)將用戶請(qǐng)求的URI基于正則式轉(zhuǎn)換為其它URl機(jī)制;并且以重定向方式默認(rèn)返回給客戶端,讓客戶端對(duì)新的URI重新再次發(fā)起請(qǐng)求

處理步驟:

在server當(dāng)中,使用rewrite指令定義的重寫(xiě)機(jī)制是自上而下逐條進(jìn)行處理的,類似于iptables的規(guī)則都是自上而下應(yīng)用設(shè)置的;如果被第一條處理,下面不會(huì)再檢查;因?yàn)樘幚磉^(guò)了已經(jīng)返回給客戶端,客戶端已經(jīng)再次請(qǐng)求新URI了。

將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查,而后完成替換

執(zhí)行過(guò)程會(huì)重復(fù)如下操作:

(1)基于用戶請(qǐng)求的URI去搜索location;

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

(3)如果URI被重寫(xiě)循環(huán)重復(fù),最多10次,就會(huì)提示錯(cuò)誤頁(yè)面

(4)用戶請(qǐng)求到達(dá)nginx服務(wù)器端時(shí),服務(wù)端有多個(gè)server虛擬主機(jī),映射到哪個(gè)server,取決于用戶請(qǐng)求的server name,根據(jù)用戶請(qǐng)求的server name最終被判斷到底請(qǐng)求的是哪個(gè)server,從而判斷屬于哪個(gè)server,每個(gè)srever內(nèi)部還有多個(gè)location,每個(gè)location用來(lái)定義URL到本地文件系統(tǒng)路徑的映射方式以及內(nèi)部處理機(jī)制;因此,還有根據(jù)用戶請(qǐng)求的URL去匹配location;所以,這里有2步操作:

第一步,根據(jù)server name匹配是哪個(gè)server,

第二步,根據(jù)用戶請(qǐng)求的URL去匹配server內(nèi)部的location;在一個(gè)location內(nèi)部可能存在多個(gè)rewrite指令,rewrite指令作用就是把用戶請(qǐng)求的URL換成其它的URL;

例如:用戶請(qǐng)求的是http://server2/hello.htm,被匹配到第二個(gè)srever上,其中l(wèi)ocation中如果第一條rewrite指令,指明了把hello.html指向了hi.html;則返回給客戶端去請(qǐng)求http://server2/hi.html,而后客戶端要重新再次發(fā)請(qǐng)求,依然自上而下去匹配屬于哪個(gè)server、哪個(gè)location;如果hi.html被第三location匹配則被location中的指令處理

例:循環(huán)重寫(xiě)示例:

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

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

寫(xiě)的規(guī)則次序很重要:根據(jù)用戶請(qǐng)求的主機(jī)名來(lái)判斷是哪個(gè)server;確定server后,根據(jù)location完成搜索,根據(jù)location中的重寫(xiě)規(guī)則完成重寫(xiě),重寫(xiě)后,返回客戶端一個(gè)新的URL,客戶端再次發(fā)請(qǐng)求;如果中間出現(xiàn)循環(huán)最大循環(huán)10此;URL重寫(xiě)可實(shí)現(xiàn)跨server,例如請(qǐng)求http://server2/images/1.jpg,改寫(xiě)為http://images/$1.html,這個(gè)images可能是其它虛擬主機(jī),甚至還可能是另一臺(tái)物理服務(wù)器;

所有URL重寫(xiě),可在一個(gè)主機(jī)上的一個(gè)server內(nèi)只把URL部分重寫(xiě),但有時(shí)可以把server重寫(xiě),實(shí)現(xiàn)鏡像服務(wù)器;把里面的服務(wù)器地址改了,但是URL沒(méi)改;

URL重寫(xiě)可把對(duì)應(yīng)動(dòng)態(tài)資源的請(qǐng)求轉(zhuǎn)換為靜態(tài)的URL地址;因此,這個(gè)結(jié)果可被搜索引擎收錄,還可被緩存服務(wù)器緩存;可理解為把動(dòng)態(tài)資源靜態(tài)化的效果;

如果用戶訪問(wèn)的php動(dòng)態(tài)資源,很多時(shí)候緩存服務(wù)器是不緩存這個(gè)結(jié)果的,但是如果動(dòng)態(tài)資源生成的結(jié)果不會(huì)再變化可以緩存服務(wù)器緩存下來(lái)時(shí)(靜態(tài)的存下來(lái)),可以給靜態(tài)URL;這種機(jī)制可在nginx的rewrite功能來(lái)實(shí)現(xiàn);但用到正則式就要啟動(dòng)正則表達(dá)式引擎,這樣會(huì)消耗更多資源;因此,盡量不使用

1、rewrite regex replacement [flag]

將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查,匹配到時(shí)將其替換為replacement指定的新的URI;

注意:如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自下而下逐個(gè)檢查;被某條件規(guī)則替換完成后,會(huì)重新一輪的替換檢查,因此,隱含有循環(huán)機(jī)制;[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制;

如果replacement是以http://或https://開(kāi)頭,則替換結(jié)果會(huì)直接以重向返回給客戶端;

301:永久重定向;

[flag]:

last:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作,而后對(duì)新的URI啟動(dòng)新一輪重寫(xiě)檢查;提前重啟新一輪循環(huán);

break:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作,而后直接跳轉(zhuǎn)至重寫(xiě)規(guī)則配置塊之后的其它配置;結(jié)束循環(huán);

redirect:重寫(xiě)完成后以臨時(shí)重定向方式直接返回重寫(xiě)后生成的新URI給客戶端,由客戶端重新發(fā)起請(qǐng)求;不能以http://或https://開(kāi)頭;

permanent:重寫(xiě)完成后以永久重定向方式直接返回重寫(xiě)后生成的新URI給客戶端,由客戶端重新發(fā)起請(qǐng)求;

如果第一條規(guī)則被last匹配了,意味著新的URI會(huì)重新做一次請(qǐng)求,nginx會(huì)在內(nèi)部自動(dòng)重新檢查,如果又被這個(gè)location匹配,還會(huì)再檢查一遍;最終將資源加載后返回給客戶端;

如果第一條規(guī)則被break匹配,rewrite停止在第一條中的新URI上,意味著不再被執(zhí)行重寫(xiě)指令即跳出循環(huán),nginx會(huì)在內(nèi)部而繼續(xù)執(zhí)行此location內(nèi)的其它指令;最終將資源加載后返回給客戶端;

如果第一條規(guī)則被redirect匹配,直接將新URL返回給客戶端,瀏覽器自動(dòng)對(duì)新URL發(fā)請(qǐng)求,這個(gè)新URL有可能還是本機(jī)中l(wèi)ocation,再解析匹配檢查,所以,redirect直接返回的不是資源,而是一個(gè)新的URL;

但redirect和permanent,表示當(dāng)用戶請(qǐng)求的URL被重定向時(shí),直接返回用戶新的URL,讓用戶自己重新請(qǐng)求,只不過(guò)這兩者的區(qū)別為,redirect是臨時(shí)重定向,permanent是永久重定向;

注意:last和break都是nginx自動(dòng)的在內(nèi)部進(jìn)行后續(xù)處理;

redirect和permanent是nginx返回URL給客戶端瀏覽器自動(dòng)重新請(qǐng)求的

注意:

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

(2)如果replacement是以http://或https://開(kāi)頭,則替換結(jié)果會(huì)直接以重定向方式返回給客戶端;

(3)如果replacement不是以http://或https://開(kāi)頭,將會(huì)按次序,依次讀取規(guī)則,所有規(guī)則都處理完成后,把最終結(jié)果返回客戶端,而不是被某條規(guī)則重寫(xiě)后立即返回客戶端;

(4)查找時(shí)可使用模式,替換為的內(nèi)容不能使用模式,但可使用后向引用,在nginx中不使用1,是使用$1來(lái)表示引用;

(5) 如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自下而下逐個(gè)檢查;被某條件規(guī)則替換完成后,會(huì)重新一輪的替換檢查,因此,隱含有循環(huán)機(jī)制;[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制;

(6)rewrite指令的執(zhí)行次序,就是寫(xiě)在配置文件中的次序,如果重寫(xiě)時(shí)一個(gè)規(guī)則依次向下循環(huán)匹配很多規(guī)則時(shí),可使用flag中的break在指定的規(guī)則上停止循環(huán),完成最終重寫(xiě)。

例:(1)無(wú)錯(cuò)誤頁(yè)面重寫(xiě)

]# vim /etc/nginx/nginx.conf
location / {
index index.html;
rewrite (.)/..?.* $1/index.html break;
}
結(jié)論:無(wú)論用戶輸入什么資源,都會(huì)重寫(xiě)到index.html頁(yè)面

(2)定義死循環(huán)

]# vim /etc/nginx/nginx.conf
location / {
index index.html;
rewrite (.*).txt $1.html;
rewrite (.*).html $1.txt;
}
結(jié)論:瀏覽器輸入http://10.1.1.25/index.txt時(shí),服務(wù)器響應(yīng)碼為500(服務(wù)器內(nèi)部錯(cuò)誤),此時(shí)在兩條重寫(xiě)規(guī)則任意一條中添加break即可終止循環(huán)。

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;#只要請(qǐng)求的類型是以.png結(jié)尾的,都改為.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
訪問(wèn)png圖片,顯示jpg圖片

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

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

將用戶訪問(wèn)80端口時(shí)改為8080

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

    #rewrite /(.*).png$ /$1.jpg;
    rewrite /(.*)$ https://www/ilinux.io/$1;  #無(wú)論用戶請(qǐng)求任何內(nèi)容,都改為https://www/ilinux.io/$1

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

2、return

return code [text];

return code URL;

return URL;

Default: —

Context: server, location, if

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

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

3、rewrite_log on | off;

Default: rewrite_log off;

Context: http, server, location, if

是否開(kāi)啟重寫(xiě)日志;啟用時(shí),日志信息被發(fā)往錯(cuò)誤日志

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

4、if (condition) { … }

Default: —

Context: server, location

引入一個(gè)新的配置上下文 ;條件滿足時(shí),執(zhí)行配置塊中的配置指令;server, location;

condition:

比較操作符:

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

~:模式匹配,左側(cè)字符串是否能被右側(cè)模式匹配,區(qū)分字母大小寫(xiě)

~*:模式匹配,左側(cè)字符串是否能被右側(cè)模式匹配,不區(qū)分字符大小寫(xiě)

!~:模式不匹配,左側(cè)字符串是否不能被右側(cè)模式匹配,區(qū)分字符大小寫(xiě)

!~*:模式不匹配,左側(cè)字符串是否不能被右側(cè)模式匹配,不區(qū)分字符大小寫(xiě)

文件及目錄存在性判斷:

-f|!-f:存在且類型為文件,嘆號(hào)表示取反

-d|!d:判斷為目錄

-e|!-e:判斷存在

-x|!-x:判斷執(zhí)行權(quán)限

例:(1)定義只允許瀏覽器類型為Chrome和Firefox時(shí),才能將.txt重寫(xiě)為.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)定義如果用戶請(qǐng)求方法為post時(shí),返回錯(cuò)誤代碼及提示給用戶

if ($request_method = POST) {

return 405 “Sorry”;

}

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

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

     (2)返回指定的錯(cuò)誤代碼不受自定義的錯(cuò)誤代碼響應(yīng)頁(yè)面影響

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

5、set $variable value;

Default: —

Context: server, location, if

用戶自定義變量,在nginx中變量無(wú)論在定義還是引用都要使用$符號(hào)

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

6、break

語(yǔ)法:Syntax: break;

Default: —

Context: server, location, if

停止處理當(dāng)前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模塊是用來(lái)阻止訪問(wèn)一個(gè)在referer頭域值無(wú)效請(qǐng)求的網(wǎng)站,基于引用做訪問(wèn)控制;表示從哪個(gè)鏈接跳轉(zhuǎn)到當(dāng)前頁(yè)面)

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

可實(shí)現(xiàn)防盜鏈拒絕訪問(wèn),拒絕來(lái)自某鏈接到本網(wǎng)頁(yè)等功能

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

none:請(qǐng)求報(bào)文首部沒(méi)有referer首部;

blocked:請(qǐng)求報(bào)文的referer首部沒(méi)有值;

server_names:參數(shù),其可以有值作為主機(jī)名或主機(jī)名模式;

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

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

配置示例:

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

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

ngx_http_proxy_module模塊:

The ngx_http_proxy_module module allows passing requests to another server.

ngx_http_proxy_module模塊允許傳遞請(qǐng)求到另一個(gè)服務(wù)器。

1、proxy_pass URL;

Default:—

Context:location, if in location, limit_except

注意:proxy_pass后面的路徑不帶uri時(shí),其會(huì)將location的uri傳遞給后端主機(jī)

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

proxy_pass后面的路徑是一個(gè)uri時(shí),其會(huì)將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時(shí)使用了正則表達(dá)式的模式,或在if語(yǔ)句或limt_execept中使用proxy_pass指令,則proxy_pass之后必須不能使用uri; 用戶請(qǐng)求時(shí)傳遞的uri將直接附加代理到的服務(wù)的之后;

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

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

2、proxy_set_header field value;

設(shè)定發(fā)往后端主機(jī)的請(qǐng)求報(bào)文的請(qǐng)求首部的值;Context: http, server, location

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

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

3、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]

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

4、proxy_cache zone | off;

指明要調(diào)用的緩存,或關(guān)閉緩存機(jī)制;Context: http, server, location

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

5、proxy_cache_key string;

緩存中用于“鍵”的內(nèi)容;

默認(rèn)值:proxy_cache_key $scheme$proxy_host$request_uri

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

6、proxy_cache_valid [code …] time;

定義對(duì)特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時(shí)長(zhǎng);

定義在http{…}中;

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

定義在需要調(diào)用緩存功能的配置段,例如server{…};

proxy_cache pxycache;

proxy_cache_key $request_uri;

proxy_cache_valid 200 302 301 1h;

proxy_cache_valid any 1m

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

7、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.(在這種情況下,不確定緩存的響應(yīng)可以用代理服務(wù)器的通信過(guò)程中出現(xiàn)錯(cuò)誤時(shí)使用。)

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

8、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. (如果在這個(gè)指令中列出客戶機(jī)請(qǐng)求方法,那么響應(yīng)將被緩存?!癎ET”和“HEAD”方法總是添加到列表中,但建議顯式地指定它們。)

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

9、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.(默認(rèn)情況下,nginx不通過(guò)頭字段“日期”、“服務(wù)器”、“X-PAD”、和“x-accel -…“從響應(yīng)一個(gè)代理服務(wù)器的客戶端。proxy_hide_header指令集的附加字段那不會(huì)被通過(guò)。)

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

10、proxy_connect_timeout time; 默認(rèn)為60s

Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.(定義了用于建立與代理服務(wù)器連接超時(shí)。需要注意的是,這個(gè)超時(shí)通常不能超過(guò)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模塊允許添加“過(guò)期”和“緩存控制頭字段,和任意的領(lǐng)域,一個(gè)響應(yīng)頭。)

向由代理服務(wù)器響應(yīng)給客戶端的響應(yīng)報(bào)文添加自定義首部,或修改指定首部的值

1、add_header name value [always];

添加自定義首部;

add_header X-Via $server_addr;

add_header X-Accel $server_name;

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

2、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模塊允許通過(guò)請(qǐng)求FastCGI服務(wù)器。)

1、fastcgi_pass address;

Default: —

Context: location, if in location

fastcgi服務(wù)器IP地址

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

2、fastcgi_index name;

Default: —

Context: http, server, location

fastcgi默認(rèn)的主頁(yè)資源

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

3、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.(設(shè)置一個(gè)參數(shù),應(yīng)通過(guò)FastCGI服務(wù)器。該值可以包含文本、變量和它們的組合。)

配置示例1:

前提:配置好fpm server和mariadb-server服務(wù)

安裝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:通過(guò)/pm_status和/ping來(lái)獲取fpm server狀態(tài)信息;

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

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

4、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的緩存;緩存位置為磁盤(pán)上的文件系統(tǒng),由path所指定路徑來(lái)定義;

levels=levels:緩存目錄的層級(jí)數(shù)量,以及每一級(jí)的目錄數(shù)量;levels=ONE:TWO:THREE

leves=1:2:2

keys_zone=name:size

k/v映射的內(nèi)存空間的名稱及大小

inactive=time

非活動(dòng)時(shí)長(zhǎng)

max_size=size

磁盤(pán)上用于緩存數(shù)據(jù)的緩存空間上限

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

5、fastcgi_cache zone | off;

Default: fastcgi_cache off;

Context: http, server, location

調(diào)用指定的緩存空間來(lái)緩存數(shù)據(jù)

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

6、fastcgi_cache_key string;

Default: —

Context: http, server, location

定義用作緩存項(xiàng)的key的字符串

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

7、fastcgi_cache_methods GET | HEAD | POST …;

Default: fastcgi_cache_methods GET HEAD;

Context: http, server, location

為哪些請(qǐng)求方法使用緩存

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

8、fastcgi_cache_min_uses number;

Default: fastcgi_cache_min_uses 1;

Context: http, server, location

緩存空間中的緩存項(xiàng)在inactive定義的非活動(dòng)時(shí)間內(nèi)至少要被訪問(wèn)到此處所指定的次數(shù)方可被認(rèn)作活動(dòng)項(xiàng)

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

9、fastcgi_cache_valid [code …] time;

Default: —

Context: http, server, location

不同的響應(yīng)碼各自的緩存時(shí)長(zhǎng);

示例:

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;
...
}
...
}
...
}

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


10、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.(默認(rèn)情況下,一個(gè)FastCGI服務(wù)器將發(fā)送響應(yīng)后關(guān)閉連接正確。然而,當(dāng)這個(gè)指令設(shè)置的值,Nginx會(huì)指示一個(gè)FastCGI服務(wù)器保持連接打開(kāi)。)


  [1]: /img/bVTI0Z

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39644.html

相關(guān)文章

  • Logtail從入門(mén)到精通(三):機(jī)器分組配置

    摘要:自定義標(biāo)識(shí)機(jī)器組基于集團(tuán)內(nèi)數(shù)年來(lái)的運(yùn)維經(jīng)驗(yàn)總結(jié),我們?cè)O(shè)計(jì)了一種靈活性更高使用更加便捷耦合度更低的配置機(jī)器管理方式自定義標(biāo)識(shí)機(jī)器分組。填寫(xiě)機(jī)器組配置。單擊確認(rèn)結(jié)束配置。 摘要: 基于集團(tuán)內(nèi)數(shù)年來(lái)的Agent運(yùn)維經(jīng)驗(yàn)總結(jié),我們?cè)O(shè)計(jì)了一種靈活性更高、使用更加便捷、耦合度更低的配置&機(jī)器管理方式:自定義標(biāo)識(shí)機(jī)器分組。此種方式對(duì)于動(dòng)態(tài)環(huán)境非常適用,尤其適用于彈性伸縮服務(wù)和swarm、pouch(...

    FuisonDesign 評(píng)論0 收藏0
  • 精通Nginx(一)

    摘要:是由為俄羅斯訪問(wèn)量第二的站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本發(fā)布于年月日。盡管在這個(gè)虛擬的環(huán)境下,防火墻和反向代理的共同作用保護(hù)了原始資源服務(wù)器,但用戶并不知情。穩(wěn)定性高用于反向代理,宕機(jī)的概率微乎其微。 博文參考 http://www.cnblogs.com/wylhome/p/6057198.html http://tengine.taobao.org/book/chapter_02.htm...

    yearsj 評(píng)論0 收藏0
  • 精通Nginx(一)

    摘要:是由為俄羅斯訪問(wèn)量第二的站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本發(fā)布于年月日。盡管在這個(gè)虛擬的環(huán)境下,防火墻和反向代理的共同作用保護(hù)了原始資源服務(wù)器,但用戶并不知情。穩(wěn)定性高用于反向代理,宕機(jī)的概率微乎其微。 博文參考 http://www.cnblogs.com/wylhome/p/6057198.html http://tengine.taobao.org/book/chapter_02.htm...

    singerye 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<