1. 程式人生 > >apache 與 php-fpm 幾種處理方式

apache 與 php-fpm 幾種處理方式

目錄

1.SetHandler

  1. 在apache配置檔案只部署一次
  2. 需要Apache 2.4.9以上才行

ip:port配置

php-fpm配置

listen = 127.0.0.1:9000

httpd配置

<FilesMatch \.php$>
setHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

UDS配置

php-fpm配置

listen = /var/run/php-fpm/php-fpm.sock

httpd配置

<FilesMatch \.php$>
    SetHandler:unix:///var/run/php-fpm/php-fpm.sock|fcgi://php-fpm
    SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost" # Apache 2.4.10設定
</FilesMatch>

2.ProxyPassMatch

需要在每個 “VirtualHost” 裡面加入

ip:port配置

<VirtualHost *:80>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1
DirectoryIndex /index.php
</VirtualHost>
  • ProxyPassMatch
    只有滿足特定正則模式的內容才會匹配並執行此規則,這裡的模式是,
    ^/(..php(/.)?)$
    從網站(虛擬主機 的根目錄開始,匹配任何以 .php 結尾,或者在 .php 之後緊跟一個 / 再跟別的內容的路徑。
  • ^ (caret) 和 $ (dollar)
    標誌要匹配的路徑的開始和結束
  • ( )
    括號裡的內容可以用 $1 來表示,以方便後面引用它。
  • fcgi://127.0.0.1:9000
    通過 mod_proxy_fcgi 來轉發的代理,使用 fastCGI 協議,轉到 PHP-FPM 監聽的埠。
    改變 IP 地址和/或埠號就可以要轉到的不同的 pool。用這個可以實現伺服器分流、均衡等。
  • /path/to/your/documentroot/
    非常重要!必須與虛擬主機的路徑匹配,且必須是對應 php 檔案在作業系統中的絕對路徑。否則會找不到檔案(PHP Script File)。這也是 URL 地址重寫的目的所在:將 URL 地址轉換成 fcgi://127.0.0.1:9000 後面緊跟著的 php 檔案絕對路徑。
  • 可以從原始請求擴充套件成整個請求路徑的變數,這裡指代前面外圍 ( ) 裡面匹配的那個路徑(uri)

我本機docker容器 httpd 和 php-fpm配置
我的php-fpm在138.38.38.110 上,配置將有所不同


<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName localhost
    <Directory "/usr/local/apache2/htdocs">
     Options None
     Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://138.38.38.110:9000/var/www/htm/$1
</VirtualHost>

3.ProxyPass

跟ProxyPassMatch 類似 ,需要在每個 VirtualHost 中分別設定

<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9000/path/to/webroot/
ProxyErrorOverride on
</LocationMatch>

相關推薦

no