zoukankan      html  css  js  c++  java
  • 转:nginx和php-fpm的两种通信方式

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

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

    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

    相关参考:http://xieminis.me/?p=216
                  http://www.cnblogs.com/hxphp/archive/2017/04/07/6677234.html

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

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

  • 相关阅读:
    前端向后端发送数据时,有时需要转数据格式,但是有时会得到意外的false数据
    js字符串处理,把img标签包裹在p标签里
    antd 对话框、上传图片、轮播图结合在一起
    JavaScript 交换数组元素位置
    codeforces 803 F. Coprime Subsequences (莫比乌斯反演)
    UVa 12716 GCD XOR (数论+bitmask)
    codeforces 1556D
    codeforces 1556 E. Equilibrium (线段树)
    codeforces 1556F
    UVa 1502 GRE Words (DP+AC自动机+jry线段树)
  • 原文地址:https://www.cnblogs.com/chenxl/p/6841589.html
Copyright © 2011-2022 走看看