10月26日 Nginx 2

1脓诡、啟動壓縮功能

ngx_http_gzip_module
用gzip方法壓縮響應(yīng)數(shù)據(jù),節(jié)約帶寬

1、gzip on | off;
啟用或禁用gzip壓縮
2凌净、gzip_comp_level level;
壓縮比由低到高:1 到9,默認(rèn):1
3搁骑、gzip_disable regex ...;
匹配到客戶端瀏覽器不執(zhí)行壓縮
4懈万、gzip_min_length length;
啟用壓縮功能的響應(yīng)報文大小閾值,也就是響應(yīng)報文達(dá)到多大后才啟用壓縮
5靶病、gzip_http_version 1.0 | 1.1;
設(shè)定啟用壓縮功能時会通,協(xié)議的最小版本,默認(rèn):1.1
6娄周、gzip_buffers number size;
支持實現(xiàn)壓縮功能時緩沖區(qū)數(shù)量及每個緩存區(qū)的大小
默認(rèn):32 4k 或16 8k
7涕侈、gzip_types mime-type ...;
指明僅對哪些類型的資源執(zhí)行壓縮操作;即壓縮過濾器
默認(rèn)包含有text/html煤辨,在配置文件中寫類型的時候不用寫上text/html裳涛,否則會出錯
8、gzip_vary on | off;
如果啟用壓縮众辨,是否在響應(yīng)報文首部插入“Vary: Accept-Encoding
9端三、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified| no_etag| auth| any ...;
nginx作為代理服務(wù)器,后端的真實服務(wù)器返回的響應(yīng)報文首部含有什么時啟用壓縮功能
off:表示做為代理服務(wù)器時不啟用壓縮
expired,no-cache, no-store鹃彻,private:對代理服務(wù)器請求的響應(yīng)報文首部Cache-Control值任何一個郊闯,啟用壓縮功能
示例
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        access_log /var/log/nginx/nginx-com.log compression ;
        gzip on;
        gzip_comp_level 9;    
        gzip_min_length 128;   ---達(dá)到128個字節(jié)就壓縮
        gzip_types text/css text/plain application/xml;

}
nginx -s reload
cp /var/log/messages-20170916 a.txt
chown nginx a.txt
在客戶端測試
[root@centos6 network-scripts]#curl -I --compressed www.a.com/a.txt
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Thu, 26 Oct 2017 12:27:38 GMT
Content-Type: text/plain
Last-Modified: Thu, 26 Oct 2017 12:25:33 GMT
Connection: keep-alive
ETag: W/"59f1d43d-2523d9"
Content-Encoding: gzip   ---表示啟用了壓縮功能

2、實現(xiàn)https

ngx_http_ssl_module模塊

1蛛株、ssl on | off;
為指定虛擬機(jī)啟用HTTPS protocol团赁,建議用listen指令代替
2、ssl_certificate file;
當(dāng)前虛擬主機(jī)使用PEM格式的證書文件
3谨履、ssl_certificate_key file;
當(dāng)前虛擬主機(jī)上與其證書匹配的私鑰文件
4欢摄、ssl_protocols[SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];支持ssl協(xié)議版本,默認(rèn)為后三個
5笋粟、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL內(nèi)建緩存怀挠,為每worker進(jìn)程私有
[shared:name:size]:在各worker之間使用一個共享的緩存,提高緩存的命中率
6析蝴、ssl_session_timeout time;
客戶端連接可以復(fù)用ssl_session_cache中緩存的ssl參數(shù)的有效時長,默認(rèn)5m
示例
cd /etc/pki/tls/certs/  
make nginx.crt
openssl rsa -in nginx.key -out nginx.key   ---解密私鑰的對稱秘鑰
vim /etc/nginx/conf.d/vhost.conf 
server {
        listen 443 ssl;   ---指定監(jiān)聽的端口和協(xié)議
        server_name www.a.com;
        root /app/website1;
        ssl on;   ---此項可以不加绿淋,因為前面已經(jīng)指定了協(xié)議嫌变,就相當(dāng)于已經(jīng)開啟了
        ssl_certificate /etc/pki/tls/certs/nginx.crt;  ---指明證書文件路徑
        ssl_certificate_key /etc/pki/tls/certs/nginx.key;  ---指明私鑰文件路徑
        ssl_session_cache shared:sslcache:20m;  ---在各worker之間使用一個共享的緩存,緩存大小為20M
        ssl_session_timeout 10m;   ---客戶端復(fù)用緩存的時間為10分鐘躬它,超過10分鐘就不可以用這個緩存了
}
nginx支持一個物理服務(wù)器上創(chuàng)建多個https的虛擬主機(jī)腾啥。這一點比apache強大,apache只支持一個https虛擬主機(jī)

3冯吓、重定向

ngx_http_rewrite_module模塊
將用戶請求的URI基于PCRE regex所描述的模式進(jìn)行檢查倘待,而后完成重定向替換

1、rewrite regex replacement [flag]
將用戶請求的URI基于regex所描述的模式進(jìn)行檢查组贺,匹配到時將其替換為replacement指定的新的URI
注意:如果在同一級配置塊中存在多個rewrite規(guī)則凸舵,那么會自上而下逐個檢查;被某條件規(guī)則替換完成后失尖,會重新一輪的替換檢查啊奄,隱含有循環(huán)機(jī)制,但不超過10次;如果超過掀潮,提示500響應(yīng)碼菇夸,[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制
如果replacement是以http://或https://開頭,則替換結(jié)果會直接以重定向返回給客戶端
[flag]:
last:重寫完成后停止對當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作仪吧,而后對新的URI啟動新一輪重寫檢查庄新;提前重啟新一輪循環(huán),不建議在location中使用
break:重寫完成后停止對當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作薯鼠,而后直接跳轉(zhuǎn)至重寫規(guī)則配置塊之后的其它配置择诈;結(jié)束循環(huán),建議在location中使用出皇,last和break客戶端發(fā)起一次請求羞芍,服務(wù)器端幫你跳轉(zhuǎn),后面兩個客戶端相當(dāng)于要發(fā)起兩次請求
redirect:臨時重定向郊艘,重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端荷科,由客戶端重新發(fā)起請求;不能以http://或https://開頭暇仲,使用相對路徑步做,狀態(tài)碼:302
permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發(fā)起請求奈附,狀態(tài)碼:301
2、return
return code [text];
return code URL;
return URL;
停止處理煮剧,并返回給客戶端指定的響應(yīng)碼
3斥滤、rewrite_log on | off;
是否開啟重寫日志, 發(fā)送至error_log(notice level)
4将鸵、set $variable value;
用戶自定義變量
注意:變量定義和調(diào)用都要以$開頭
5、if (condition) { ... }
引入新的上下文,條件滿足時佑颇,執(zhí)行配置塊中的配置指令顶掉;server, location
condition:
比較操作符:
== 相同
!= 不同
~:模式匹配,區(qū)分字符大小寫
~*:模式匹配挑胸,不區(qū)分字符大小寫
!~:模式不匹配痒筒,區(qū)分字符大小寫
!~*:模式不匹配,不區(qū)分字符大小寫
文件及目錄存在性判斷:
-e, !-e 存在(包括文件茬贵,目錄簿透,軟鏈接)
-f, !-f 文件
-d, !-d 目錄
-x, !-x 執(zhí)行
示例
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        access_log /var/log/nginx/nginx-com.log compression ;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 128;
        gzip_types text/css text/plain application/xml;
        location / {
       rewrite ^/(.*)$ https://www.a.com/$1 redirect;    ---表示當(dāng)訪問http下的根時就臨時重定向到https下的根 ^/(.*)$用于匹配輸入的uri,如果匹配解藻,就重定向到https根下老充,$1代表前面正則表達(dá)式匹配的內(nèi)容
        }
        location /zz {
        rewrite ^/zz/(.*)$ /zhengzhou/$1 permanent;  ---表示當(dāng)輸入的uri匹配/zz/目錄下的任何文件時就永久重定向到zhengzhou這個目錄下的前面所匹配的文件
}
        location /admin {
        return 302 http://www.baidu.com/;   ---表示訪問/admin目錄時就跳轉(zhuǎn)至百度
        return 403 'disallow';   ---表示當(dāng)訪問admin目錄時就放回一個字符串disallow
}
}

4、從哪跳轉(zhuǎn)(referer)

ngx_http_referer_module模塊
用來阻止Referer首部無有效值的請求訪問螟左,可防止盜鏈

valid_referers none|blocked|server_names|string...;
定義referer首部的合法可用值啡浊,不能匹配的將是非法值
none:請求報文首部沒有referer首部
blocked:請求報文有referer首部,但無有效值
server_names:參數(shù)胶背,其可以有值作為主機(jī)名或主機(jī)名模式巷嚣,表示本機(jī)
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正則表達(dá)式模式匹配到的字符串,要使用~開頭钳吟,例如:~.*\.magedu\.com
示例1:實現(xiàn)跳轉(zhuǎn)
準(zhǔn)備兩個虛擬主機(jī)涂籽,www.a.com和www.b.com
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        access_log /var/log/nginx/nginx-com.log compression ;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 128;
        gzip_types text/css text/plain application/xml; 
}
server{
        listen 80 ;
        server_name www.b.com;
        root /app/website2;
        access_log /var/log/nginx/nginx-2com.log compression ;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 128;
        gzip_types text/css text/plain application/xml;
}
vim a.html   ---a.html為www.a.com主目錄下的文件
<a href=http://www.b.com> b.html </a>    ---表示當(dāng)你訪問http://www.a.com/a.html時會出現(xiàn)一個超鏈接b.html,鼠標(biāo)點擊這個超鏈接就會跳轉(zhuǎn)至www.b.com
在www.b.com主目錄下準(zhǔn)備一個index.html文件砸抛,這樣訪問www.a.com時就會訪問這個文件评雌,實現(xiàn)跳轉(zhuǎn)
在b上查看日志可以發(fā)現(xiàn)從www.a.com跳轉(zhuǎn)過來的。
示例2:實現(xiàn)盜鏈
cd /app/website1
cp /usr/share/pixmaps/faces/sky.jpg a.jpg  ---在www.a.com網(wǎng)站的主目錄下創(chuàng)建一個圖片文件
cd /app/website2
vim b.html
<img src=http://www.a.com/a.jpg>    ---表示訪問www.b.com/b.html時就會盜取www.a.com下的圖片a.jpg
測試
http://www.b.com/b.html  ---發(fā)現(xiàn)成功盜取a網(wǎng)站的圖片
示例3:如何實現(xiàn)防止盜鏈
[root@centos7 website2]#vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        access_log /var/log/nginx/nginx-com.log compression ;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 128;
        gzip_types text/css text/plain application/xml;
        valid_referers none block server_names *.a.com ~.*\.baidu\.com;   ---定義一個合法的跳轉(zhuǎn)直焙,也就是允許哪些主機(jī)跳轉(zhuǎn)
        if ($invalid_referer){
                return 403 ;     ---表示如果是無效的跳轉(zhuǎn)就被禁止景东,返回狀態(tài)碼403
}
測試
http://www.b.com/b.html  ---發(fā)現(xiàn)無法盜取www.a.com網(wǎng)站上的圖片
查看www.a.com的日志文件,發(fā)現(xiàn)被禁止奔誓,出現(xiàn)403狀態(tài)碼

5斤吐、反向代理和緩存

ngx_http_proxy_module模塊

  • proxy_pass URL;
    Context:location, if in location, limit_except
    注意:proxy_pass后面路徑不帶uri時,會將location的uri傳遞(附加)給后端主機(jī)
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location /images {
        proxy_pass http://172.18.21.106;   ---當(dāng)不加/時表示當(dāng)你訪問/images目錄時就反向代理至172.18.21.106/images目錄厨喂,如果加上/表示反向代理制172.18.21.106根目錄
}
}
在172.18.21.106上查看日志我們發(fā)現(xiàn)請求是來自反向代理服務(wù)器而不是真正的客戶端和措,說明nginx做為反向代理服務(wù)器代替客戶端去訪問后面真正realserver上的資源,并將結(jié)果返回給客戶端
  • 如果location定義其uri時使用了正則表達(dá)式的模式蜕煌,則proxy_pass之后必須不能使用uri,也就是不能加斜線; 用戶請求時傳遞的uri將直接附加至后端服務(wù)器之后
    示例:實現(xiàn)訪問html文件時調(diào)度到一臺主機(jī)派阱、訪問jpg文件時調(diào)度到另外一臺主機(jī)
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location ~ \.html$ {
        proxy_pass http://172.18.21.106;    ---表示當(dāng)你訪問的是.html結(jié)尾的文件時就調(diào)度到172.18.21.106目錄下以.html結(jié)尾的文件
}
        location ~ \.(jpg|png|gif){
        proxy_pass http://172.18.21.7;  ---當(dāng)你訪問的是.jpg|png|gif結(jié)尾的文件時就調(diào)度到172.18.21.7目錄下的響應(yīng)文件
}
}
以上可以實現(xiàn).html文件和圖片文件的分別調(diào)度,要注意的是用正則表達(dá)式匹配時斜纪,不能加后面的斜線
  • proxy_set_header field value;
    設(shè)定發(fā)往后端realserver的請求報文的請求首部的值
    Context: http, server, location
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    請求報文的標(biāo)準(zhǔn)格式如下:
    X-Forwarded-For: client1, proxy1, proxy2
示例:實現(xiàn)經(jīng)過Nginx反向代理后在后端的realserver上的日志中能個夠查看到真正的客戶端的地址
在nginx上服務(wù)器上的設(shè)置
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
       location ~ \.html$ {
        proxy_pass http://172.18.21.106;
}
        location ~ \.(jpg|png|gif)$ {
        proxy_pass http://172.18.21.7;
        proxy_set_header zhang-header $remote_addr;
}   ---$remote_addr是客戶端的地址贫母,如果用$proxy_add_x_forwarded_for也可以文兑,這個變量表示如果Nginx反向代理服務(wù)器前面還有代理服務(wù)器,比如cdn代理腺劣,這個變量表示的是客戶端和一個一個的代理服務(wù)器的地址绿贞,zhang-header可以任意寫,是自己隨便定義的一個首部
}
nginx -s reload
在后端httpd服務(wù)器上的操作
vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{zhang-header}i\" \"%{User-Agent}i\"" combined   ---在日志格式中定義調(diào)用這個請求首部
systemctl restart httpd
測試
訪問http://www.a.com/b.jpg橘原,在后端的httpd服務(wù)器上查看日志籍铁,可以看到客戶端的地址
  • 緩存
1、 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];
2拒名、proxy_cache zone | off; 默認(rèn)off
指明調(diào)用的緩存,或關(guān)閉緩存機(jī)制歼冰;Context:http, server, location
3靡狞、proxy_cache_keystring;
緩存中用于“鍵”的內(nèi)容
默認(rèn)值:proxy_cache_key$scheme$proxy_host$request_uri;
4、proxy_cache_valid[code ...] time;
定義對特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時長
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
5隔嫡、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 ...
在被代理的后端服務(wù)器出現(xiàn)哪種情況下甸怕,可以真接使用過期的緩存響應(yīng)客戶端
6、proxy_cache_methods GET | HEAD | POST ...;
對哪些客戶端請求方法對應(yīng)的響應(yīng)進(jìn)行緩存腮恩,GET和HEAD方法總是被緩存
7梢杭、proxy_hide_header field;
默認(rèn)nginx在響應(yīng)報文不傳遞后端服務(wù)器的首部字段Date, Server, X-Pad, X-Accel-等,用于隱藏后端服務(wù)器特定的響應(yīng)首部
8秸滴、proxy_connect_timeout time;
定義與后端服務(wù)器建立連接的超時時長武契,如超時會出現(xiàn)502錯誤,默認(rèn)為60s荡含,一般不建議超出75s咒唆,
9、proxy_send_timeout time;
將請求發(fā)送給后端服務(wù)器的超時時長释液;默認(rèn)為60s
10全释、proxy_read_timeout time;
等待后端服務(wù)器發(fā)送響應(yīng)報文的超時時長,默認(rèn)為60s
示例
1误债、vim /etc/nginx/nginx.conf
proxy_cache_path /var/lib/nginx/tmp/pcache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g;  ---注意只能定義在http浸船,不能定義在server、location寝蹈,keys_zone=proxycache:20m定義一個緩存空間的名字李命,也就是內(nèi)存中的緩存空間,大小是20M箫老, max_size=1g表示保存到磁盤上的最大空間是1g
    tcp_nodelay         on;
2封字、vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location ~ \.html$ {
        proxy_pass http://172.18.21.106;
        proxy_cache proxycache;  ---調(diào)用前面定義的緩存空間
        proxy_cache_key $request_uri;     
        proxy_cache_valid 200 301 302 1h;   ---定義每種狀態(tài)碼緩存的時間
        proxy_cache_valid any 1m;
}
}
nginx -s reload
3、訪問、測試
http://www.a.com/a.html   ---訪問之后就會有緩存
ab -c 1000 -n 10000 172.18.21.107/a.html  ---測試周叮,和之前的對比辩撑,發(fā)現(xiàn)緩存之后速度提升很多
[root@centos7 pcache]#tree
.
├── 5
│   └── bd
│       └── 00
│           └── b7337bb1b8a2bfd56bccb9cecb200bd5
└── b
    ├── 2d
    │   └── 78
    │       └── 65827078a9f7ccce59632263294782db
    └── 82
        └── a4
            └── d1546d731a9f30cc80127d57142a482b
levels=1:2:2  定義緩存的目錄結(jié)構(gòu)界斜,用于存儲客戶端訪問的資源和文件仿耽,先是對緩存的文件進(jìn)行哈希值運算,運算后是一個16進(jìn)制的數(shù)字各薇,每個16進(jìn)制代表4位二進(jìn)制项贺,如果用md5算法進(jìn)行哈希值運算,得出來是128位峭判,1:2:2代表用哈希運算后的從后至前1位16進(jìn)制數(shù)字表示1級目錄的名字开缎,2位16進(jìn)制數(shù)字代表二級目錄的名字,2位16進(jìn)制代表三級目錄的名字

每一級目錄的個數(shù)如下圖


Paste_Image.png
  • ngx_http_headers_module模塊
    向由代理服務(wù)器響應(yīng)給客戶端的響應(yīng)報文添加自定義首部林螃,或修改指定首部的值奕删,用于向客戶端發(fā)送的響應(yīng)報文中,添加代理服務(wù)器的首部信息
1疗认、add_header name value [always];
添加自定義首部
add_header X-Via $server_addr;   ---添加代理服務(wù)的地址
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;    ---添加代理服務(wù)的FQDN名字
2完残、add_trailer name value [always];
添加自定義響應(yīng)信息的尾部

6、Nginx反向代理至php和緩存

ngx_http_fastcgi_module
轉(zhuǎn)發(fā)客戶端的請求到FastCGI服務(wù)器横漏,不支持php模塊方式

Paste_Image.png
1谨设、fastcgi_pass address;
address為后端的fastcg iserver的地址,可用位置:location, if in location
2、fastcgi_index name;
fastcgi默認(rèn)的主頁資源
示例:fastcgi_index index.php;
3缎浇、fastcgi_param parameter value [if_not_empty];
設(shè)置傳遞給FastCGI服務(wù)器的參數(shù)值扎拣,可以是文本,變量或組合

示例:實現(xiàn)當(dāng)客戶端訪問的是php程序的時候就反向代理至后端的php服務(wù)器

1素跺、在php服務(wù)器上安裝php-fpm
yum install php-fpm
vim /etc/php-fpm.d/www.conf 
listen = 9000
;listen.allowed_clients = 127.0.0.1  ---把這一行用分號注釋掉二蓝,默認(rèn)允許任何主機(jī)訪問
pm.status_path = /status  ---打開下面這兩項就可以查看php的運行狀態(tài)
ping.path = /ping
service php-fpm start
mkdir /app/php   ---創(chuàng)建一個存放php程序的根目錄
vim a.php 
vim a.php 
<?php
phpinfo();
?>
2、在nginx服務(wù)器上的配置
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location ~* \.php$ {     ---當(dāng)匹配的uri是以.php結(jié)尾的文件時就反向代理至后端的php服務(wù)器
                fastcgi_pass 172.18.21.106:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;  ---指明后端存放php程序的目錄指厌,$fastcgi_script_name匹配的是你訪問的uri中.php文件
                include fastcgi_params;   ---此文件在/etc/nginx/目錄下
}
        location ~* ^/(status|ping)$ {          ---當(dāng)匹配的cui是status或者ping時就反向代理至后端的php服務(wù)器刊愚,可以查看php服務(wù)器的運行狀態(tài)
                fastcgi_pass 172.18.21.106:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
                include fastcgi_params;
}
}
nginx -s reload
3、測試
http://www.a.com/a.php    ---可以發(fā)現(xiàn)連接php成功
http://www.a.com/status    ---可以查看php運行狀態(tài)
http://www.a.com/ping      ---當(dāng)后端的php是活著的時候會出現(xiàn)pong字樣仑乌,表示是活著的
  • 實現(xiàn)fastcgi緩存
1百拓、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 緩存位置為磁盤上的文件系統(tǒng)
max_size=size:磁盤path路徑中用于緩存數(shù)據(jù)的緩存空間上限
levels=levels:緩存目錄的層級數(shù)量晰甚,以及每一級的目錄數(shù)量,levels=ONE:TWO:THREE,示例:leves=1:2:2
keys_zone=name:size:k/v映射的內(nèi)存空間的名稱及大小,也就是在內(nèi)存中定義一個緩存空間的名稱和大小
inactive=time非活動時長
2衙传、fastcgi_cache zone | off;
調(diào)用指定的緩存空間來緩存數(shù)據(jù)
可用位置:http, server, location
3、fastcgi_cache_key string;
定義用作緩存項的key的字符串
示例:fastcgi_cache_key $request_rui;
4厕九、fastcgi_cache_methods GET | HEAD | POST ...;
為哪些請求方法使用緩存
5蓖捶、fastcgi_cache_min_uses number;
緩存空間中的緩存項在inactive定義的非活動時間內(nèi)至少要被訪問到此處所指定的次數(shù)方可被認(rèn)作活動項
6、fastcgi_keep_conn on | off;
收到后端服務(wù)器響應(yīng)后扁远,fastcgi服務(wù)器是否關(guān)閉連接俊鱼,建議啟用長連接
7刻像、fastcgi_cache_valid[code ...] time;
不同的響應(yīng)碼各自的緩存時長
示例
1、vim /etc/nginx/nginx.conf
fastcgi_cache_path /var/lib/nginx/tmp/fastcgicache levels=1:2:2 keys_zone=fastcgicac
he:20m inactive=120s max_size=1g;    ---只能放在http位置并闲,不能放在server和location
2细睡、vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location ~* \.php$ {
                fastcgi_pass 172.18.21.106:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_cache fastcgicache;    ---調(diào)用上面定義的緩存空間
                fastcgi_cache_key $request_uri;
                fastcgi_cache_valid 200 301 302 1h;   ---定義每種響應(yīng)碼緩存的時間
                fastcgi_cache_valid any 1m;

}
3、測試
http://www.a.com/index.php   ---在瀏覽器訪問后會有緩存
ab -c 100 -n 1000 172.18.21.107/a.php    ---發(fā)現(xiàn)比原來的快了很多

7帝火、upstream實現(xiàn)將用戶的請求反向調(diào)度至后端的多個realserver溜徙,實現(xiàn)平衡負(fù)載

ngx_http_upstream_module模塊
用于將多個服務(wù)器定義成服務(wù)器組,而由proxy_pass, fastcgi_pass等指令進(jìn)行引用

1犀填、upstream name { ... }
定義后端服務(wù)器組趁桃,會引入一個新的上下文
默認(rèn)調(diào)度算法是wrr
Context: http
upstream httpdsrvs{
server ...
server...
...
}
2牵舱、server address [parameters];
在upstream上下文中server成員蛙埂,以及相關(guān)的參數(shù)室琢;Context:upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number 權(quán)重,默認(rèn)為1
max_conns連接后端報務(wù)器最大并發(fā)活動連接數(shù)冕广,1.11.5后支持
max_fails=number失敗嘗試最大次數(shù)疏日;超出此處指定的次數(shù)時,server將被標(biāo)記為不可用,默認(rèn)為1
fail_timeout=time 后端服務(wù)器標(biāo)記為不可用狀態(tài)的連接超時時長佳窑,默認(rèn)10s
backup將服務(wù)器標(biāo)記為“備用”制恍,即所有服務(wù)器均不可用時才啟用
down標(biāo)記為“不可用”,配合ip_hash使用神凑,實現(xiàn)灰度發(fā)布,也就是讓服務(wù)器一部分一部分的上線
3净神、ip_hash源地址hash調(diào)度方法
4、least_conn最少連接調(diào)度算法溉委,當(dāng)server擁有不同的權(quán)重時其為wlc鹃唯,當(dāng)所有后端主機(jī)連接數(shù)相同時,則使用wrr瓣喊,適用于長連接
5坡慌、hash key [consistent]基于指定的key的hash表來實現(xiàn)對請求的調(diào)度,此處的key可以直接文本藻三、變量或二者組合
作用:將請求分類洪橘,同一類請求將發(fā)往同一個upstream server,使用consistent參數(shù)棵帽,將使用ketama一致性hash算法熄求,適用于后端是Cache服務(wù)器(如varnish)時使用
hash $request_uri consistent;訪問相同的uri調(diào)度到同一個realserver
hash $remote_addr;
6、keepalive連接數(shù)N;
為每個worker進(jìn)程保留的空閑的長連接數(shù)量,可節(jié)約nginx端口逗概,并減少連接管理的消耗
示例
vim /etc/nginx/nginx.conf
  upstream webserver {      ---只能定義在http處
                server 172.18.21.106:80 weight=2;
                server 172.18.21.7:80;
        }
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location  / {
        proxy_pass http://webserver;     ---當(dāng)訪問根時就會根據(jù)算法調(diào)度到后面的realserver上
}
}
測試
http://www.a.com/

8弟晚、實現(xiàn)基于tcp或udp的反向調(diào)度

ngx_stream_core_module模塊
模擬反代基于tcp或udp的服務(wù)連接,即工作于傳輸層的反代或調(diào)度器
ngx_stream_proxy_module模塊
可實現(xiàn)代理基于TCP,UDP (1.9.13), UNIX-domain sockets的數(shù)據(jù)流
1 proxy_pass address;
指定后端服務(wù)器地址
2 proxy_timeout timeout;
無數(shù)據(jù)傳輸時卿城,保持連接狀態(tài)的超時時長枚钓,默認(rèn)為10m
3 proxy_connect_timeout time;
設(shè)置nginx與被代理的服務(wù)器嘗試建立連接的超時時長
默認(rèn)為60s
示例:實現(xiàn)nginx反向代理mysql數(shù)據(jù)庫服務(wù)

1、在后端兩個mysql數(shù)據(jù)庫服務(wù)器上的操作
yum install mysql-server
service mysqld start
chkconfig mysqld on
mysql
create user test@'172.18.21.107' identified by 'centos';   ---在兩臺mysql服務(wù)器上都要創(chuàng)建一個用戶能夠遠(yuǎn)程連接mysql數(shù)據(jù)瑟押,在這里設(shè)定的是172.18.21.107這臺主機(jī)的test用戶可以連接搀捷,默認(rèn)root用戶是不能遠(yuǎn)程連接的。
2勉耀、在nginx服務(wù)器上的操作
vim /etc/nginx/nginx.conf   ---注意要把這個語句塊放到http上面指煎,和http語句塊是平級的關(guān)系
stream{
        upstream mysqlsrvs{
                server 172.18.21.6:3306;
                server 172.18.21.7:3306;  ---兩臺rs的地址和端口
                least_conn;  ---指明調(diào)度算法為最小連接
}
        server{
                listen 172.18.21.107:3306;
                proxy_pass mysqlsrvs;
                proxy_timeout 60s;    ---無數(shù)據(jù)傳輸時保持連接狀態(tài)的超時時長
                proxy_connect_timeout 10s;   ----nginx與后端rs嘗試建立連接的超時時長
}
}
nginx   ----啟動服務(wù)
3蹋偏、在客戶端測試
mysql -utest -p'centos' -h'172.18.21.107'   ---輸入兩次便斥,發(fā)現(xiàn)每次連接的數(shù)據(jù)庫不同,說明nginx反向調(diào)度成功

9威始、源碼編譯安裝nginx

1枢纠、安裝開發(fā)包組和響應(yīng)的軟件包、創(chuàng)建賬號
yum groupinstall "development tools"
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx -s /sbin/nologin    ---創(chuàng)建一個nginx賬號
cd /app
tar xvf nginx-1.12.2.tar.gz 
2黎棠、更改源碼信息晋渺,將版本信息更改
vim /app/nginx-1.12.2/src/http/ngx_http_header_filter_module.c 
static u_char ngx_http_server_string[] = "Server: zhanginx" CRLF;   ---表示關(guān)閉server_tokens off時顯示的版本信息
vim /app/nginx-1.12.2/src/core/nginx.h 
#define NGINX_VERSION      "6.66.666."
#define NGINX_VER          "tengine/" NGINX_VERSION
3、執(zhí)行configure腳本脓斩,并安裝
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx--group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
make -j 4 && make install
4木西、修改PATH變量
 vim /etc/profile.d/nginx.sh
PATH=/usr/local/sbin/:$PATH
. /etc/profile.d/nginx.sh
echo $PATH
5、修改配置文件随静,并啟動服務(wù)
vim /etc/nginx/nginx.conf
user  nginx;  ---將user改為nginx八千,否則啟動不了服務(wù)
nginx  ---啟動服務(wù)
6、測試
[root@centos6 php.d]#curl -I 172.18.21.7
HTTP/1.1 200 OK
Server: tengine/6.66.666.    ---發(fā)現(xiàn)版本信息已經(jīng)修改
Date: Sat, 28 Oct 2017 13:24:34 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 28 Oct 2017 13:10:09 GMT
Connection: keep-alive
ETag: "59f481b1-264"
Accept-Ranges: bytes
7燎猛、修改配置文件
vim /etc/nginx/nginx.conf
server_tokens off;   ---在http語句塊中加上這條內(nèi)容
nginx -s reload
8恋捆、測試
[root@centos6 php.d]#curl -I 172.18.21.7
HTTP/1.1 200 OK
Server: zhanginx   ---發(fā)現(xiàn)版本號是我們自己定義的了
Date: Sat, 28 Oct 2017 13:26:48 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 28 Oct 2017 13:10:09 GMT
Connection: keep-alive
ETag: "59f481b1-264"
Accept-Ranges: bytes
備注:
編譯安裝nginx選項:
--prefix=/etc/nginx 安裝路徑
--sbin-path=/usr/sbin/nginx 指明nginx程序文件安裝路徑
--conf-path=/etc/nginx/nginx.conf 主配置文件安裝位置
--error-log-path=/var/log/nginx/error.log 錯誤日志文件安裝位置
--http-log-path=/var/log/nginx/access.log 訪問日志文件安裝位置
--pid-path=/var/run/nginx.pid 指明pid文件安裝位置
--lock-path=/var/run/nginx.lock 鎖文件安裝位置
--http-client-body-temp-path=/var/cache/nginx/client_temp 
--http-proxy-temp-path=/var/cache/nginx/proxy_temp作為代理服務(wù)器,服務(wù)器響應(yīng)報文的臨時文件存放路徑
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp作為fastcgi代理服務(wù)器重绷,服務(wù)器響應(yīng)報文的臨時文件存放路徑
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp作為uwsgi代理服務(wù)器沸停,服務(wù)器響應(yīng)報文的臨時文件存放路徑
--http-scgi-temp-path=/var/cache/nginx/scgi_temp作為scgi反代服務(wù)器,服務(wù)器響應(yīng)報文的臨時文件存放路徑
--user=nginx指明以那個身份運行worker進(jìn)程昭卓,主控master進(jìn)程一般由root運行
--group=nginx
--with-http_ssl_module表示把指定模塊編譯進(jìn)來
客戶端body部分的臨時文件存放路徑愤钾,如果服務(wù)器允許客戶端使用put方法提交大數(shù)據(jù)時,臨時存放的磁盤路徑
[root@centos7 ~]#nginx -V   ---使用此條命令在用yum安裝的nginx服務(wù)器上可以看到y(tǒng)um編譯安裝時候的各個選項的設(shè)置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末候醒,一起剝皮案震驚了整個濱河市能颁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌火焰,老刑警劉巖劲装,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡占业,警方通過查閱死者的電腦和手機(jī)绒怨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谦疾,“玉大人南蹂,你說我怎么就攤上這事∧罨校” “怎么了六剥?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長峰伙。 經(jīng)常有香客問我疗疟,道長,這世上最難降的妖魔是什么瞳氓? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任策彤,我火速辦了婚禮,結(jié)果婚禮上匣摘,老公的妹妹穿的比我還像新娘店诗。我一直安慰自己,他們只是感情好音榜,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布庞瘸。 她就那樣靜靜地躺著,像睡著了一般赠叼。 火紅的嫁衣襯著肌膚如雪擦囊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天梅割,我揣著相機(jī)與錄音霜第,去河邊找鬼。 笑死户辞,一個胖子當(dāng)著我的面吹牛泌类,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播底燎,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刃榨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了双仍?” 一聲冷哼從身側(cè)響起枢希,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朱沃,沒想到半個月后苞轿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茅诱,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年搬卒,在試婚紗的時候發(fā)現(xiàn)自己被綠了瑟俭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡契邀,死狀恐怖摆寄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坯门,我是刑警寧澤微饥,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站古戴,受9級特大地震影響欠橘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜允瞧,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一简软、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧述暂,春花似錦、人聲如沸建炫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肛跌。三九已至艺配,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衍慎,已是汗流浹背转唉。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留稳捆,地道東北人赠法。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像乔夯,于是被迫代替她去往敵國和親砖织。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx末荐?那么一定聽過它的“同行”Apache吧侧纯!Ngi...
    JokerW閱讀 32,670評論 24 1,002
  • 1.簡介: ? Nginx:engine X ,2002年甲脏,開源眶熬,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評論 0 3
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》妹笆,我們講述了瀏覽器端請求發(fā)起過程,通過DNS域名解析服務(wù)器IP娜氏,并建...
    七寸知架構(gòu)閱讀 80,990評論 21 356
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一晾浴、I/O模型 (一)I/...
    哈嘍別樣閱讀 892評論 0 4
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9