原文地址: apache 與 php-fpm 幾種處理方式php
<h3 id="1">1.SetHandler</h3>nginx
php-fpm配置web
listen = 127.0.0.1:9000
httpd配置docker
<FilesMatch \.php$> setHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
php-fpm配置apache
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>
<h3 id="2">2.ProxyPassMatch</h3>ide
須要在每一個 "VirtualHost" 裏面加入php-fpm
<VirtualHost *:80> ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1 DirectoryIndex /index.php </VirtualHost>
從網站(虛擬主機 <VirtualHost > 的根目錄開始,匹配任何以 .php 結尾,或者在 .php 以後緊跟一個 / 再跟別的內容的路徑。網站
標誌要匹配的路徑的開始和結束ui
括號裏的內容能夠用 $1 來表示,以方便後面引用它。
經過 mod_proxy_fcgi 來轉發的代理,使用 fastCGI 協議,轉到 PHP-FPM 監聽的端口。
改變 IP 地址和/或端口號就能夠要轉到的不一樣的 pool。用這個能夠實現服務器分流、均衡等。
很是重要!必須與虛擬主機的路徑匹配,且必須是對應 php 文件在操做系統中的絕對路徑。不然會找不到文件(PHP Script File)。這也是 URL 地址重寫的目的所在:將 URL 地址轉換成 fcgi://127.0.0.1:9000 後面緊跟着的 php 文件絕對路徑。
我本機docker容器 httpd 和 php-fpm配置
個人php-fpm在138.38.38.110 上,配置將有所不一樣
<VirtualHost *:80> ServerAdmin shenyi@com.cn 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>
關於docker-compose 安裝配置,看我docker compose 安裝配置nginx 反向代理 httpd php-fpm
<h3 id="3">3.ProxyPass</h3>
跟ProxyPassMatch 相似 ,須要在每一個 VirtualHost 中分別設置
<LocationMatch ^(.*\.php)$> ProxyPass fcgi://127.0.0.1:9000/path/to/webroot/ ProxyErrorOverride on </LocationMatch>