Nginx和PHP-FPM的进程间通信

Nginx和PHP-FPM的进程间通信有两种方式:

1是TCP ,2是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----.

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走的就更多了.

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-FPM

像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=3306

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,859评论 0 3
  • FastCGI模块模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。 一、CGI和Fast...
    北山学者阅读 9,221评论 3 8
  • 安装环境 系统: centos 6.8软件: nginx/1.10.3 mysql/5.6.35 php/7.1....
    luckyhua阅读 310评论 0 0
  • 会读书不会输是《一站到底24章经》的副标题,这本书是听喜马拉雅时主播介绍的,正好准备买书就一起买了,书刚到时...
    坤道率然阅读 202评论 0 0
  • 细碎的雪花跌落脚下细碎的雪花将额头敲打细碎的雪花心湖里融化 既然选择了这条路就要坚持一直走下去坚持下去就成了人生 ...
    白鱼书简阅读 323评论 0 1