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調用方式》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM