php-fpm的兩種配置方式

配置方式

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

兩種方式的區別

unix socket 方式

優勢: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,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調用方式》

相關文章
相關標籤/搜索