nginx连接fastcgi的方式有2种:TCP和unix domain socket, Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。根据相关测试,结论是在服务器压力不大的情况下,tcp和socket差别不大,但在压力比较满的时候,用套接字方式,效果确实比较好。

下面是Ubuntu 16.04 下 PHP 7.0版本将TCP改成socket方式的配置方法:

        修改/etc/php/7.0/fpm/pool.d/www.conf文件:   

;listen = 127.0.0.1:9000
listern = /dev/shm/php7.0-fpm.sock #/dev/shm是个tmpfs,速度比磁盘快

        修改nginx配置文件server段(以默认配置文件为例,/etc/nginx/conf.d/default.conf)的配置,将http的方式改为socket方式:

location ~ \.php$ {
    #   root           html;
    #   fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass   unix:/dev/shm/php7.0-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

重启php-fpm与nginx即可:

sudo /etc/init.d/php7.0-fpm reload
sudo /etc/init.d/nginx reload