php-fpm.confphp
listen = 127.0.0.1:9000 // ip + port 方式 ;listen = /dev/shm/php-cgi.sock // unix socket 方式
以上配置二选一便可, 接下来在 Apache 或者 Nginx 中须要使用与之对应的方式监听,参考配置以下:html
Apachelinux
<VirtualHost *:80> ServerAdmin admin@example.com DocumentRoot "/data/wwwroot/default" ServerName 127.0.0.1 ErrorLog "/data/wwwlogs/error_apache.log" CustomLog "/data/wwwlogs/access_apache.log" common <Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$> Order allow,deny Deny from all </Files> <FilesMatch \.php$> SetHandler "proxy:unix:/dev/shm/php-cgi.sock|fcgi://localhost" // unix socket 形式 # SetHandler "proxy:fcgi://127.0.0.1:9000" // ip + port 形式 </FilesMatch> </VirtualHost>
Nginxnginx
server { listen 80; #监听80端口,接收http请求 server_name www.example.com; #就是网站地址 root /data/wwwroot/default; # 准备存放代码工程的路径 #路由到网站根目录www.example.com时候的处理 location / { index index.php; #跳转到www.example.com/index.php autoindex on; } #当请求网站下php文件的时候,反向代理到php-fpm location ~ \.php$ { include /usr/local/nginx/conf/fastcgi.conf; #加载nginx的fastcgi模块 fastcgi_intercept_errors on; fastcgi_pass unix:/dev/shm/php-cgi.sock; // unix socket 形式 # fastcgi_pass 127.0.0.1:9000; // ip + port 形式 include proxy.conf; } }
工做原理git
优势:apache
unix socket 方式要比 tcp 的方式快,并且消耗资源少,由于 socket 之间在 nginx 和 php-fpm 的进程之间通讯,而 tcp 须要通过本地回环驱动,还要申请临时端口和 tcp 相关资源。缓存
会有不少 linux 傻瓜面板,他们可能会有不少中 php-fpm 的版本,那么若是是不一样版本去开不一样的端口,而后 nginx 去配置的话,你要记住不少端口,sock 文件即是解决这个问题最简单的方法。服务器
Socket 是使用 unix domain socket 链接套接字 /dev/shm/php-cgi.sock并发
缺点:dom
unix socket 会显得不是那么稳定,当并发链接数爆发时,会产生大量的长时缓存,在没有面向链接协议支撑的状况下,大数据包颇有可能就直接出错并不会返回异常。
虽然 sock 有更少的数据拷贝和上下文切换,更少的资源占用,可是若是数据都是错的,那还有什么用呢。另外使用 sock 的话,必须 nginx 和 fpm 在同一台机器上
优势:
从稳妥的考虑确定是使用 tcp,tcp 协议能保证数据的正确性,sock 不能保证。
能够跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式
缺点:
性能不如 unix socket
/usr/local/php/sbin/php-fpm // 启动 php-fpm /usr/local/php/sbin/php-fpm restart // 重启 php-fpm ps aux | grep php-fpm // 查看 php-fpm 是否启动 ps aux | grep -c php-fpm // 查看 php-fpm 进程数 php -i | grep mem // 查看运行内存 php -i | grep Configure // 查看 php 编译参数