轉:nginx和php-fpm的兩種通訊方式

原文地址:https://segmentfault.com/q/1010000004854045php

Nginx和PHP-FPM的進程間通訊有兩種方式,一種是TCP,一種是UNIX Domain Socket.
其中TCP是IP加端口,能夠跨服務器.而UNIX Domain Socket不通過網絡,只能用於Nginx跟PHP-FPM都在同一服務器的場景.用哪一種取決於你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一個文件,由php-fpm生成,類型是srw-rw----.html

UNIX Domain Socket可用於兩個沒有親緣關係的進程,是目前普遍使用的IPC機制,好比X Window服務器和GUI程序之間就是經過UNIX Domain Socket通信的.這種通訊方式是發生在系統內核裏而不會在網絡裏傳播.UNIX Domain Socket和長鏈接都能避免頻繁建立TCP短鏈接而致使TIME_WAIT鏈接過多的問題.對於進程間通信的兩個程序,UNIX Domain Socket的流程不會走到TCP那層,直接以文件形式,以stream socket通信.若是是TCP Socket,則須要走到IP層,對於非同一臺服務器上,TCP Socket走的就更多了.mysql

UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地迴環):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位於不一樣服務器):
Nginx <=> socket <=> TCP/IP <=> 物理層 <=> 路由器 <=> 物理層 <=> TCP/IP <=> socket <=> PHP-FPMnginx

像mysql命令行客戶端鏈接mysqld服務也相似有這兩種方式:
使用Unix Socket鏈接(默認):
mysql -uroot -p --protocol=socket --socket=/tmp/mysql.sock
使用TCP鏈接:
mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306sql

 

相關參考:http://xieminis.me/?p=216
              http://www.cnblogs.com/hxphp/archive/2017/04/07/6677234.htmlsegmentfault

              http://xxgblog.com/2015/05/17/nginx-start/服務器

              https://zhuanlan.zhihu.com/p/20694204網絡

相關文章
相關標籤/搜索