最新消息:

Nginx 连接fastcgi 的两种通信方式对比

Nginx 264浏览 0评论

Nginx 连接fastcgi 有两种方式:unix domain socket 和 TCP socket

unix domain socket 或者 IPC socket 是一种终端,可以使同一台操作系统上的两个或者多个进程进行数据通信。与管道相比,unix domain socket 可以使用字节流和数据队列,而管道通信则只能通过字节流。unix domain socket 的接口和internet socket很像,但它不适用网络底层协议来通信。 unix domain socket 的功能是POSIX 操作系统里的一种组件。

下面对比 unix domain socket 和TCP socket两种通信方式

首先看nginx server配置信息

location ~ \.php$ {
    #   include snippets/fastcgi-php.conf;
        include fastcgi_params;
        # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_param PATH_INFO  $fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    }

使用 unix domain socket 则配置为

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

使用 TCP socket 通信方式则配置为

fastcgi_pass 127.0.0.1:9000;

对于进程间通讯的两个程序,unix domain socket的流程不会走到TCP 那层,直接以文件形式,以stream socket通讯。如果是TCP socket,则需要走到IP层。所以理论上 unix domain socket 的处理效率会更优于 TCP socket。

参考链接:http://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/

转载请注明:微刻 blog.wecot.cn » Nginx 连接fastcgi 的两种通信方式对比

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址