在配置nginx的时候,fastcgi_pass的配置问题,以下所示:php
location ~ \.php$ { root /home/wwwroot; fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass unix:/tmp/php-cgi.sock; try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
主要是关于fastcgi_pass参数,mysql
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass unix:/tmp/php-cgi.sock;
这两种方式有什么区别,php7该用哪个?nginx
以下:sql
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=3306php7