php-fpm的两种配置方式

配置方式

php-fpm.conf

listen = 127.0.0.1:9000         // ip + port 方式
;listen = /dev/shm/php-cgi.sock    // unix socket 方式

以上配置二选一即可, 接下来在 Apache 或者 Nginx 中需要使用与之对应的方式监听,参考配置如下:

Apache

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

Nginx

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;
    }
}      

 

工作原理

两种方式的区别

unix socket 方式

优点:

unix socket 方式要比 tcp 的方式快,而且消耗资源少,因为 socket 之间在 nginx 和 php-fpm 的进程之间通信,而 tcp 需要经过本地回环驱动,还要申请临时端口和 tcp 相关资源。

会有很多 linux 傻瓜面板,他们可能会有很多中 php-fpm 的版本,那么如果是不同版本去开不同的端口,然后 nginx 去配置的话,你要记住很多端口,sock 文件便是解决这个问题最简单的方法。

Socket 是使用 unix domain socket 连接套接字 /dev/shm/php-cgi.sock

缺点:

unix socket 会显得不是那么稳定,当并发连接数爆发时,会产生大量的长时缓存,在没有面向连接协议支撑的情况下,大数据包很有可能就直接出错并不会返回异常。

虽然 sock 有更少的数据拷贝和上下文切换,更少的资源占用,但是如果数据都是错的,那还有什么用呢。另外使用 sock 的话,必须 nginx 和 fpm 在同一台机器上

tcp 方式

优点:

从稳妥的考虑肯定是使用 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 编译参数 

参考:《nginx和php-fpm调用方式》

posted @ 2018-12-05 15:42  Azure沫  阅读(2836)  评论(0编辑  收藏  举报