成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【nginx運(yùn)維基礎(chǔ)(9)】了解PHP-FPM與Nginx的通信機(jī)制

learn_shifeng / 3075人閱讀

摘要:介紹協(xié)議與協(xié)議每種動(dòng)態(tài)語(yǔ)言等的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。

PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議

每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而 CGI 協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。PHP 文件在服務(wù)器上的解析需要用到 PHP 解釋器,再加上對(duì)應(yīng)的 CGI 協(xié)議,從而使服務(wù)器可以解析到 PHP 文件。

由于 CGI 的機(jī)制是每處理一個(gè)請(qǐng)求需要 fork 一個(gè) CGI 進(jìn)程,請(qǐng)求結(jié)束再kill掉這個(gè)進(jìn)程,在實(shí)際應(yīng)用上比較浪費(fèi)資源,于是就出現(xiàn)了CGI 的改良版本 FastCGI,FastCGI 在請(qǐng)求處理完后,不會(huì) kill 掉進(jìn)程,而是繼續(xù)處理多個(gè)請(qǐng)求,這樣就大大提高了效率。

PHP-FPM 是什么

PHP-FPM 即 PHP-FastCGI Process Manager, 它是 FastCGI 的實(shí)現(xiàn),并提供了進(jìn)程管理的功能。進(jìn)程包含 master 進(jìn)程和 worker 進(jìn)程兩種;master 進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽(tīng)端口,接收來(lái)自服務(wù)器的請(qǐng)求,而 worker 進(jìn)程則一般有多個(gè)(具體數(shù)量根據(jù)實(shí)際需要進(jìn)行配置),每個(gè)進(jìn)程內(nèi)部都會(huì)嵌入一個(gè) PHP 解釋器,是代碼真正執(zhí)行的地方。

Nginx 與 php-fpm 通信機(jī)制

當(dāng)我們?cè)L問(wèn)一個(gè)網(wǎng)站(如 www.test.com)的時(shí)候,處理流程是這樣的:

 www.test.com 
 |
 |
 Nginx 
 |
 |
location 到 www.test.com/index.php 
 |
 |
加載 nginx 的 fast-cgi 模塊 
 |
 |
fast-cgi 監(jiān)聽(tīng) 127.0.0.1:9000 地址 
 |
 |
www.test.com/index.php 請(qǐng)求到達(dá) 127.0.0.1:9000
 |
 |
 等待處理...
Nginx 與 php-fpm 的結(jié)合

在 Linux 上,nginx 與 php-fpm 的通信有 tcp socket 和 unix socket 兩種方式。

tcp socket 的優(yōu)點(diǎn)是可以跨服務(wù)器,當(dāng) nginx 和 php-fpm 不在同一臺(tái)機(jī)器上時(shí),只能使用這種方式。

Unix socket 又叫 IPC(inter-process communication 進(jìn)程間通信) socket,用于實(shí)現(xiàn)同一主機(jī)上的進(jìn)程間通信,這種方式需要在 nginx配置文件中填寫(xiě) php-fpm 的 socket 文件位置。

兩種方式的數(shù)據(jù)傳輸過(guò)程如下圖所示:

二者的不同:

由于 Unix socket 不需要經(jīng)過(guò)網(wǎng)絡(luò)協(xié)議棧,不需要打包拆包、計(jì)算校驗(yàn)和、維護(hù)序號(hào)和應(yīng)答等,只是將應(yīng)用層數(shù)據(jù)從一個(gè)進(jìn)程拷貝到另一個(gè)進(jìn)程。所以其效率比 tcp socket 的方式要高,可減少不必要的 tcp 開(kāi)銷(xiāo)。不過(guò),unix socket 高并發(fā)時(shí)不穩(wěn)定,連接數(shù)爆發(fā)時(shí),會(huì)產(chǎn)生大量的長(zhǎng)時(shí)緩存,在沒(méi)有面向連接協(xié)議的支撐下,大數(shù)據(jù)包可能會(huì)直接出錯(cuò)不返回異常。而 tcp 這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。

Nginx 與 php-fpm 結(jié)合只需要在各自的配置文件中做設(shè)置即可:

1) Nginx 中的配置

以 tcp socket通信為例

server { 
 listen 80; #監(jiān)聽(tīng) 80 端口,接收http請(qǐng)求
 server_name www.test.com; #就是網(wǎng)站地址
 root /usr/local/etc/nginx/www/huxintong_admin; # 準(zhǔn)備存放代碼工程的路徑
 #路由到網(wǎng)站根目錄 www.test.com 時(shí)候的處理
 location / { 
 index index.php; #跳轉(zhuǎn)到 www.test.com/index.php
 autoindex on;
 } 

 #當(dāng)請(qǐng)求網(wǎng)站下 php 文件的時(shí)候,反向代理到 php-fpm
 location ~ .php$ { 
 include /usr/local/etc/nginx/fastcgi.conf; #加載 nginx 的 fastcgi 模塊
 fastcgi_intercept_errors on; 
 fastcgi_pass 127.0.0.1:9000; # tcp 方式,php-fpm 監(jiān)聽(tīng)的 IP 地址和端口
 # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 連接方式
 }
}

2) php-fpm 的配置

php-fpm.conf

listen = 127.0.0.1:9000
# 或者類(lèi)似下面這樣
listen = /var/run/php-fpm.sock
注意,在使用 unix socket 方式連接時(shí),由于 socket 文件本質(zhì)上是一個(gè)文件,存在權(quán)限控制的問(wèn)題,所以需要注意 nginx 進(jìn)程的權(quán)限與 php-fpm 的權(quán)限問(wèn)題,不然會(huì)提示無(wú)權(quán)限訪問(wèn)。(在各自的配置文件里設(shè)置用戶(hù))

通過(guò)以上配置即可完成 php-fpm 與 nginx 的通信。

在應(yīng)用中的選擇

如果是在同一臺(tái)服務(wù)器上運(yùn)行的 nginx 和 php-fpm,且并發(fā)量不高(不超過(guò)1000),選擇unix socket,以提高 nginx 和 php-fpm 的通信效率。
如果是面臨高并發(fā)業(yè)務(wù),則考慮選擇使用更可靠的 tcp socket,以負(fù)載均衡、內(nèi)核優(yōu)化等運(yùn)維手段維持效率。

若并發(fā)較高但仍想用 unix socket 時(shí),可通過(guò)以下方式提高 unix socket 的穩(wěn)定性。

1)將sock文件放在 /dev/shm 目錄下,此目錄下將 sock 文件放在內(nèi)存里面,內(nèi)存的讀寫(xiě)更快。

2)提高 backlog

backlog 默認(rèn)位 128,1024 這個(gè)值最好換算成自己正常的 QPS,配置如下。

nginx.conf 文件中

server { 
 listen 80 
 default backlog = 1024;
}

php-fpm.conf 文件中

listen.backlog = 1024

3)增加 sock 文件和 php-fpm 實(shí)例

在 /dev/shm 新建一個(gè) sock 文件,在 nginx 中通過(guò) upstream 模塊將請(qǐng)求負(fù)載均衡到兩個(gè) sock 文件,并且將兩個(gè) sock 文件分別對(duì)應(yīng)到兩套 php-fpm 實(shí)例上。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31743.html

相關(guān)文章

  • nginx運(yùn)維基礎(chǔ)(9)】了解PHP-FPMNginx通信機(jī)制

    摘要:介紹協(xié)議與協(xié)議每種動(dòng)態(tài)語(yǔ)言等的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議 每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,...

    raoyi 評(píng)論0 收藏0
  • PHP-FPM Nginx 通信機(jī)制總結(jié)

    摘要:介紹協(xié)議與協(xié)議每種動(dòng)態(tài)語(yǔ)言等的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而...

    garfileo 評(píng)論0 收藏0
  • PHP-FPM Nginx 通信機(jī)制總結(jié)

    摘要:介紹協(xié)議與協(xié)議每種動(dòng)態(tài)語(yǔ)言等的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而...

    Turbo 評(píng)論0 收藏0
  • PHP-FPM Nginx 通信機(jī)制總結(jié)

    摘要:而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。個(gè)人總結(jié),若有不對(duì),敬請(qǐng)指正 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議 每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而 CGI 協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。PHP 文件在服務(wù)器上的解析需要用到 ...

    gekylin 評(píng)論0 收藏0
  • PHP-FPM Nginx 通信機(jī)制總結(jié)

    摘要:而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶(hù)通過(guò)以上配置即可完成與的通信。個(gè)人總結(jié),若有不對(duì),敬請(qǐng)指正 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議 每種動(dòng)態(tài)語(yǔ)言( PHP,Python 等)的代碼文件需要通過(guò)對(duì)應(yīng)的解析器才能被服務(wù)器識(shí)別,而 CGI 協(xié)議就是用來(lái)使解釋器與服務(wù)器可以互相通信。PHP 文件在服務(wù)器上的解析需要用到 ...

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

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

0條評(píng)論

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