1. 程式人生 > >高效能PHP apache httpd 2.4.x使用mod_proxy_fcgi和php-fpm

高效能PHP apache httpd 2.4.x使用mod_proxy_fcgi和php-fpm


  1. yum install -y httpd mod_proxy_fcgi

編輯http.conf
在虛擬主機配置php-fpm 代理

  1. ProxyPassMatch^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1
  2. DirectoryIndex/index.php index.php

ProxyPassMatch

在這種情況下:只有與指定的正則表示式模式匹配的代理內容

^/(..php(/.)?)$

從文件根開始,匹配以.php結尾的所有內容(帶點轉義),可選的後跟一個斜槓和任何你喜歡的繼續路徑(一些應用程式使用這個所謂的PathInfo將引數傳遞給php指令碼。
^(插入符號)和$(美元)符號用於錨定URL的絕對開始和結束,以確保請求中的任何字元都不會轉義我們的模式匹配。
巢狀括號使我們能夠將整個請求URI(減去前導斜槓)引用為$ 1,同時仍然保持尾隨pathinfo可選。

fcgi://127.0.0.1:9000

通過mod_proxy_fcgi轉發,使用fastCGI協議,到我們的php-fpm守護程式監聽的埠。
這確定哪個fastcgi池將服務由此規則代理的請求。

/path/to/your/documentroot

重要! 這必須與您的php檔案的真實檔案系統位置完全匹配,因為這是php-fpm守護程式將查詢它們的位置。
php-fpm只是解釋傳遞給它的php檔案; 它不是一個Web伺服器,也不瞭解您的Web伺服器的名稱空間,虛擬主機佈局或別名。
重要!

$1

從原始請求擴充套件到整個請求URI,減去前導斜槓(因為我們已經添加了上面的。)

DirectoryIndex /index.php index.php

對/將需要對映到fcgi後端上的資源的請求。 未能解決此問題可能會導致空白響應,通常稱為WSOD(死亡白屏),特別是如果僅代理包含php副檔名的請求URI,例如本示例。 處理鏈將首先將針對/的請求對映到/index.php或相對於當前請求uri的任何其他index.php檔案,然後正確地代理到PHP-FPM後端。

unix domain socket (UDS) approach

編輯您選擇的vhost的配置,並向其新增以下行:

  1. ProxyPassMatch^/(.*\.php(/.*)?)$ unix:/path/to/socket.sock|fcgi://127.0.0.1:9000/path/to/your/documentroot/

unix:/path/to/socket.sock

您的fpm套接字的路徑
請注意,使用此方法,捕獲的請求URI($ 1)不會在路徑之後傳遞