Nginx (六)

一圆米、ngx_http_headers_module

1崭歧、 add_header name value [always];
2、 add_trailer name value [always];

FastCGI:

二古徒、ngx_http_fastcgi_module

1、 fastcgi_pass address;
2臼闻、 fastcgi_index name
3鸿吆、 fastcgi_param parameter value [if_not_empty];
4、 fastcgi_cache_path
5述呐、 fastcgi_cache zone | off; 
6惩淳、 fastcgi_cache_key string;
7、 fastcgi_cache_methods GET
8乓搬、 fastcgi_cache_min_uses number;
9思犁、 fastcgi_keep_conn on | off;
10、 fastcgi_cache_valid [code ...] time;

三进肯、ngx_http_upstream_module

1抒倚、 upstream name { ... }
2、 server address [parameters];
3坷澡、 ip_hash 
4托呕、 least_conn
5、 hash key [consistent]
6频敛、 keepalive 
7项郊、 health_check [parameters];
8、 match name { ... }

四斟赚、ngx_stream_core_module

1着降、 stream { ... }
2、 listen

一拗军、ngx_http_headers_module

向由代理服務器響應給客戶端的響應報文添加自定義首部任洞,或修改指定首部的值
1、 add_header name value [always];
添加自定義首部
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;

2发侵、 add_trailer name value [always];
添加自定義響應信息的尾部

FastCGI:

二交掏、ngx_http_fastcgi_module

FastCGI是從CGI發(fā)展改進而來的。傳統(tǒng)CGI接口方式的主要缺點是性能很差刃鳄,因為每次HTTP服務器遇到動態(tài)程序時都需要
重新啟動腳本解析器來執(zhí)行解析盅弛,然后結果被返回給HTTP服務器。這在處理高并發(fā)訪問時叔锐,幾乎是不可用的挪鹏。另外傳統(tǒng)的
CGI接口方式安全性也很差,現(xiàn)在已經(jīng)很少被使用了愉烙。

 FastCGI接口方式采用C/S結構讨盒,可以將HTTP服務器和腳本解析服務器分開,同時在腳本解析服務器上啟動一個或者多個腳
本解析守護進程步责。當HTTP服務器每次遇到動態(tài)程序時返顺,可以將其直接交付給FastCGI進程來執(zhí)行禀苦,然后將得到的結果返回
給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態(tài)請求或者將動態(tài)腳本服務器的結果返回給客戶端创南,這在很大程度上
提高了整個應用系統(tǒng)的性能伦忠。

Nginx不支持對外部程序的直接調(diào)用或者解析省核,所有的外部程序(包括PHP)必須通過FastCGI接口來調(diào)用稿辙。FastCGI接口在
Linux下是socket,(這個socket可以是文件socket气忠,也可以是ip socket)邻储。為了調(diào)用CGI程序,還需要一個FastCGI的wrapper
(wrapper可以理解為用于啟動另一個程序的程序)旧噪,這個wrapper綁定在某個固定socket上吨娜,如端口或者文件socket。當Nginx
將CGI請求發(fā)送給這個socket的時候淘钟,通過FastCGI接口宦赠,wrapper接納到請求,然后派生出一個新的線程米母,這個線程調(diào)用解釋
器或者外部程序處理腳本并讀取返回數(shù)據(jù)勾扭;接著,wrapper再將返回的數(shù)據(jù)通過FastCGI接口铁瞒,沿著固定的socket傳遞給Nginx
妙色;最后,Nginx將返回的數(shù)據(jù)發(fā)送給客戶端慧耍,這就是Nginx+FastCGI的整個運作過程身辨。
ngx_http_fastcgi_module模塊
轉(zhuǎn)發(fā)請求到FastCGI服務器,不支持php模塊方式
1芍碧、 fastcgi_pass address;
address為后端的fastcgi server的地址可用位置: location, if in location
2煌珊、 fastcgi_index name;   fastcgi默認的主頁資源
示例: fastcgi_index index.php;
3、 fastcgi_param parameter value [if_not_empty];  
設置傳遞給 FastCGI服務器的參數(shù)值泌豆,可以是文本怪瓶,變量或組合
示例1:
1)在后端服務器先配置fpm server和mariadb-server
2)在前端nginx服務上做以下配置:
location ~* \.php$ {
fastcgi_pass 后端fpm服務器IP:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;    參數(shù)數(shù)組
…
}
示例2:
通過/pm_status和/ping來獲取fpm server狀態(tài)信息
location ~* ^/(pm_status|ping)$ {
include fastcgi_params;
fastcgi_pass 后端fpm服務器IP: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的緩存践美;
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)存空間的名稱及大小
inactive=time 非活動時長

5、 fastcgi_cache zone | off;  調(diào)用指定的緩存空間來緩存數(shù)據(jù)可用位置: http, server, location

6陨倡、 fastcgi_cache_key string;  定義用作緩存項的key的字符串
示例: fastcgi_cache_key $request_rui;

7敛滋、 fastcgi_cache_methods GET | HEAD | POST ...;  為哪些請求方法使用緩存

8、 fastcgi_cache_min_uses number;
緩存空間中的緩存項在inactive定義的非活動時間內(nèi)至少要被訪問到此處所指定的次數(shù)方可被認作活動項

 9兴革、 fastcgi_keep_conn on | off;  收到后端服務器響應后绎晃, fastcgi服務器是否關閉連接蜜唾,建議啟用長連接

10、 fastcgi_cache_valid [code ...] time; 不同的響應碼各自的緩存時長
示例:
http {
fastcgi_cache_path /var/cache/nginx/fcgi_cache
levels=1:2:1 keys_zone=fcgicache:20m inactive=120s;
...
server {
location ~* \.php$ {
...
fastcgi_cache fcgicache;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
...
}
}
啟用代理功能轉(zhuǎn)發(fā)到fastcgi上面庶艾,安裝fastcgi服務器袁余,fastcgi可以用apache代替,在106安裝fastcgi
106機器
yum install php-fpm
修改php-fpm配置文件
vim /etc/php-fpm.d/www.conf  刪除監(jiān)聽地址咱揍,留端口颖榜,允許遠程ip連接
注釋掉遠程連接;listen.allowed_clients = any
狀態(tài)頁煤裙,測試ping掩完,發(fā)消息pong
php-fpm是獨立進程,自定義存放路徑硼砰,創(chuàng)建目錄app/php(使其與反向代理服務器
fastcgi_param SCRIPT_FILENAME  /app/php/$fastcgi_script_name對應) 并在此目錄中存放動態(tài)資源
mkdir /app/php
cd /app/php/
vim index.html
107機器
收到請求后需要通過代理功能轉(zhuǎn)發(fā)到后端的fastcgi服務器上面由9000端口處理且蓬,把頁面返回傳至客戶端
vim /etc/nginx/vhost.conf  
location ~ \.php$   哪種格式的轉(zhuǎn)發(fā)
fastcgi_pass address;  address  轉(zhuǎn)發(fā)后端的fastcgi server的地址和端口
fastcgi_index name;  fastcgi默認的主頁資源
fastcgi_param SCRIPT_FILENAME  用戶發(fā)請求腳本名稱是放在后端fastcgi哪個路徑上面后面跟上URL
107創(chuàng)建頁面文件
cd /app/site1/
echo 107 > index.html
108機器訪問107代理機器
curl http://192.168.25.107  
性能測試
107機器
修改fastcgi.conf模板文件也可以
vim /etc/nginx/vhost.conf  
vim /etc/nginx/fastcgi.conf  修改路徑/app/php
跟上面操作效果一樣
vim /etc/nginx/vhost.conf      不用寫路徑默認主頁
Nginx 服務器開啟status頁面檢測服務狀態(tài)
做相應的控制location符合status|ping路徑時候,轉(zhuǎn)發(fā)到后端fastcgi做處理,需要用到路徑

狀態(tài)信息可以調(diào)整格式题翰,status?full,status?xml,status?json

www連接chi
連接狀態(tài)
開始時間
連接數(shù)
進程數(shù)

還可以ping下恶阴,會出現(xiàn)pong說明還在
可以切換格式顯示
可以觀察后端fastcgi的狀態(tài)
108數(shù)據(jù)庫
yum install mariadb-server
創(chuàng)建賬號授權用戶
106機器php
yum install php-mysql
vim /app/php/index.php   連接數(shù)據(jù)庫代碼   后端是mariadb,兩種格式都可以
使用mysql擴展連接數(shù)據(jù)庫的測試代碼
<?php
$conn = mysql_connect(‘mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
mysql_close();
?>

<?php
$mysqli=new mysqli("mysqlserver",“username",“password");
if(mysqli_connect_errno()){
echo "連接數(shù)據(jù)庫失敗!";
$mysqli=null;
exit;
}
echo "連接數(shù)據(jù)庫成功!";
$mysqli->close();
?>

啟動服務   systemctl start php-fpm
106機器  搭建wordpress
cd /app/php/  
tar xvf wordpress-4.8.1-zh_CN.tar.gz
107代理機器
緩存定義nginx.conf
fastcgi 動態(tài)頁面也是在這個位置
  vim /etc/nginx/vhost.conf調(diào)用fastcgi緩存   跟之前proxy 格式差不多
加載nginx服務
nginx -s reload

108機器
curl http://192.168.25.107/index.php

107代理機器
查看緩存記錄
108機器測試緩存
ab -c 100 -n 2000 http://192.168.25.107/index.php
之前測試800左右豹障,這次開啟緩存4000多
關閉緩存測試
效果很明顯800多
完成OK

三冯事、ngx_http_upstream_module

用于將多個服務器定義成服務器組,而由proxy_pass,fastcgi_pass等指令進行引用
1沼填、 upstream name { ... } 定義后端服務器組桅咆,會引入一個新的上下文  默認調(diào)度算法是wrr
Context: http
upstream httpdsrvs {
server ...
server...
...
}

2、 server address [parameters];
在upstream上下文中server成員坞笙,以及相關的參數(shù)岩饼; Context:upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number 權重,默認為1
max_conns 連接后端報務器最大并發(fā)活動連接數(shù)薛夜, 1.11.5后支持
max_fails=number 失敗嘗試最大次數(shù)籍茧;超出此處指定的次數(shù)時, server將被標記為不可用,默認為1
fail_timeout=time 后端服務器標記為不可用狀態(tài)的連接超時時長梯澜,默認10s
backup 將服務器標記為“備用”寞冯,即所有服務器均不可用時才啟用
down 標記為“不可用”,配合ip_hash使用晚伙,實現(xiàn)灰度發(fā)布    打補丁吮龄,修復加載

3、 ip_hash 源地址hash調(diào)度方法    來自一個客戶端的請求會一直調(diào)度過去

4咆疗、 least_conn 最少連接調(diào)度算法漓帚,當server擁有不同的權重時其為wlc,當所有后端主機連接數(shù)相同時午磁,
則使用wrr尝抖,適用于長連接

5毡们、 hash key [consistent] 基于指定的key的hash表來實現(xiàn)對請求的調(diào)度,此處的key可以直接文本昧辽、變量或二者組合
作用:將請求分類衙熔,同一類請求將發(fā)往同一個upstream
server,使用consistent參數(shù)搅荞, 將使用ketama一致性hash算法红氯,適用于后端是Cache服務器(如varnish)時使用
hash $request_uri consistent;       目標請求做hash   全部包括參數(shù)  ,適合配合緩存vanish
hash $remote_addr;      客戶端hash
6取具、 keepalive 連接數(shù)N;
為每個worker進程保留的空閑的長連接數(shù)量,可節(jié)約nginx端口脖隶,并減少連接管理的消耗

 7扁耐、 health_check [parameters];
健康狀態(tài)檢測機制暇检;只能用于location上下文常用參數(shù):
interval=time檢測的頻率,默認為5秒
fails=number:判定服務器不可用的失敗檢測次數(shù)婉称;默認為1次
passes=number:判定服務器可用的失敗檢測次數(shù)块仆;默認為1次
uri=uri:做健康狀態(tài)檢測測試的目標uri;默認為/
match=NAME:健康狀態(tài)檢測的結果評估調(diào)用此處指定的match配置塊
注意:僅對nginx plus有效

 8 match name { ... }
對backend server做健康狀態(tài)檢測時王暗,定義其結果判斷機制悔据;只能用于http上下文
常用的參數(shù):
status code[ code ...]: 期望的響應狀態(tài)碼
header HEADER[operator value]:期望存在響應首部,也可對期望的響應首部的值基于比較操作符和值進行比較
body:期望響應報文的主體部分應該有的內(nèi)容
注意:僅對nginx plus有效
106后端機器
cat /var/www/html/index.html
welcome to centos 6  106
108后端機器
 cat /var/www/html/index.html
centos 7  108

107代理機器
vim /etc/nginx.conf     
一組服務器
后端兩個服務器   端口號  權重
定義后端服務器組俗壹,會引入一個新的上下文健康狀態(tài)檢查 默認調(diào)度算法是wrr
vim /etc/nginx/vhosts.conf 誰的請求調(diào)度科汗,端口,網(wǎng)站 绷雏,調(diào)度協(xié)議名稱
加載服務 nginx -s reload
106機器http停止服務头滔,107代理機器會默認調(diào)度到108機器上面,
108機器宕機了服務就502訪問失敗,107代理機器也可以當server
vim /etc/lnginx/nginx.conf       backup 將服務器標記為“備用”涎显,即所有服務器均不可用時才啟用
重啟服務nginx -s reload
curl 127.0.0.1   正常來說是可以的坤检,

也可以新建一個地址,域名期吓,端口號
vim /etc/nginx/vhosts.conf
curl 127.0.0.1     
換過端口后訪問轉(zhuǎn)發(fā)到107代理機器上面早歇,108再開啟服務,系統(tǒng)就主動的轉(zhuǎn)發(fā)到后端108機器上面
hash $request_uri consistent; 目標請求做hash 全部包括參數(shù) 讨勤,適合配合緩存vanish

四箭跳、ngx_stream_core_module

nginx的其它的二次發(fā)行版:
Tengine:由淘寶網(wǎng)發(fā)起的Web服務器項目。它在Nginx的基礎上潭千,針對大訪問量網(wǎng)站的需求谱姓,添加了很多高級功能和特性。
Tengine的性能和穩(wěn)定性已經(jīng)在大型的網(wǎng)站如淘寶網(wǎng)脊岳,天貓商城等得到了很好的檢驗逝段。它的最終目標是打造一個高效垛玻、穩(wěn)定、
安全奶躯、易用的Web平臺帚桩。從2011年12月開始, Tengine成為一個開源項目嘹黔,官網(wǎng) http://tengine.taobao.org/
OpenResty:基于 Nginx 與 Lua 語言的高性能 Web平臺
模擬反代基于tcp或udp的服務連接账嚎,即工作于傳輸層的反代或調(diào)度器
1、 stream { ... }
定義stream相關的服務儡蔓; Context:main
stream {
upstream telnetsrvs {
server 192.168.22.2:23;
server 192.168.22.3:23;
least_conn;
}
server {listen 10.1.0.6:23;
proxy_pass telnetsrvs;
}
}

2郭蕉、 listen

listen address:port [ssl] [udp] [proxy_protocol]
[backlog=number] [bind] [ipv6only=on|off] [reuseport]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
ngx_stream_proxy_module模塊
ngx_stream_proxy_module模塊   可實現(xiàn)代理基于TCP, UDP (1.9.13), UNIX-domain sockets的數(shù)據(jù)流
1 proxy_pass address;指定后端服務器地址
2 proxy_timeout timeout;無數(shù)據(jù)傳輸時喂江,保持連接狀態(tài)的超時時長默認為10m
3 proxy_connect_timeout time;設置nginx與被代理的服務器嘗試建立連接的超時時長默認為60s
示例
stream {
upstream telnetsrvs {
server 192.168.10.130:23;
server 192.168.10.131:23;
hash $remote_addr consistent;    
根據(jù)客戶端地址進行hash值調(diào)度召锈,只要客戶端來自一個地址就一直調(diào)度過去,tcp,udp協(xié)議也可以往一個上面調(diào)度
}
server {
listen 172.16.100.10:2323;
proxy_pass telnetsrvs;
proxy_timeout 60s;
proxy_connect_timeout 10s;
}
}
測試轉(zhuǎn)發(fā)調(diào)度mysql服務器
后端機器106    安裝mysql   版本5.1
后端機器108    安裝mysql    版本5.5
代理機器107 
106后端機器創(chuàng)建數(shù)據(jù)庫
108后端機器創(chuàng)建數(shù)據(jù)庫
107代理機器
后端數(shù)據(jù)庫組名 mysqlsrvs
指定監(jiān)聽前段互聯(lián)網(wǎng)信息端口
反向代理調(diào)度到mysqlsrvs
客戶端機器測試調(diào)度過去的數(shù)據(jù)庫
106后端服務器的mysql被調(diào)度
108后端服務器的MySQL被調(diào)度
完成OK
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末获询,一起剝皮案震驚了整個濱河市涨岁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吉嚣,老刑警劉巖梢薪,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尝哆,居然都是意外死亡秉撇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門秋泄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琐馆,“玉大人,你說我怎么就攤上這事印衔》却罚” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵奸焙,是天一觀的道長瞎暑。 經(jīng)常有香客問我,道長与帆,這世上最難降的妖魔是什么了赌? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮玄糟,結果婚禮上勿她,老公的妹妹穿的比我還像新娘。我一直安慰自己阵翎,他們只是感情好逢并,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布之剧。 她就那樣靜靜地躺著,像睡著了一般砍聊。 火紅的嫁衣襯著肌膚如雪背稼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天玻蝌,我揣著相機與錄音蟹肘,去河邊找鬼。 笑死俯树,一個胖子當著我的面吹牛帘腹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播许饿,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阳欲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了米辐?” 一聲冷哼從身側響起胸完,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤书释,失蹤者是張志新(化名)和其女友劉穎翘贮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爆惧,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡狸页,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扯再。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芍耘。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熄阻,靈堂內(nèi)的尸體忽然破棺而出斋竞,到底是詐尸還是另有隱情,我是刑警寧澤秃殉,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布坝初,位于F島的核電站,受9級特大地震影響钾军,放射性物質(zhì)發(fā)生泄漏鳄袍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一吏恭、第九天 我趴在偏房一處隱蔽的房頂上張望拗小。 院中可真熱鬧,春花似錦樱哼、人聲如沸哀九。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阅束。三九已至惨篱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围俘,已是汗流浹背砸讳。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留界牡,地道東北人簿寂。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像宿亡,于是被迫代替她去往敵國和親常遂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx挽荠?那么一定聽過它的“同行”Apache吧克胳!Ngi...
    JokerW閱讀 32,670評論 24 1,002
  • 1.簡介: ? Nginx:engine X ,2002年圈匆,開源漠另,商業(yè)版? http協(xié)議:web服務器(類似于ht...
    尛尛大尹閱讀 1,867評論 0 3
  • I/O模型Nginx介紹Nginx的安裝和目錄結構Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 893評論 0 4
  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9
  • 《老男孩Linux運維》筆記 隱藏Nginx軟件版本號 一般來說跃赚,軟件的漏洞都和版本有關笆搓。因此要盡量隱藏對訪問用戶...
    Zhang21閱讀 3,640評論 0 28