1.SetHandler 2.ProxyPassMatch 3.ProxyPass
在apache配置文件只部署一次
须要Apache 2.4.9以上才行php
listen = 127.0.0.1:9000nginx
<FilesMatch .php$>
setHandler "proxy:fcgi://127.0.0.1:9000"
web
listen = /var/run/php-fpm/php-fpm.sockdocker
<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设置
apache
须要在每一个 “VirtualHost” 里面加入服务器
<VirtualHost :80>
ProxyPassMatch ^/(..php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1
DirectoryIndex /index.php
ide
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 上,配置将有所不一样php-fpm
<VirtualHost :80>
ServerAdmin shenyi@com.cn
DocumentRoot "/usr/local/apache2/htdocs"
ServerName localhost
<Directory "/usr/local/apache2/htdocs">
Options None
Require all granted
ProxyRequests Off
ProxyPassMatch ^/(..php)$ fcgi://138.38.38.110:9000/var/www/htm/$1
网站
关于docker-compose 安装配置,看我docker compose 安装配置nginx 反向代理 httpd php-fpmui
跟ProxyPassMatch 相似 ,须要在每一个 VirtualHost 中分别设置
<LocationMatch ^(.*.php)$>
ProxyPass fcgi://127.0.0.1:9000/path/to/webroot/
ProxyErrorOverride on
最后感谢 http://cnzhx.net/blog/apache-httpd-mod_proxy_fcgi-php-fpm/#listen
来源:http://www.taoluyuan.com/index.php/archives/37/#http://www.taoluyuan.com/index.php/archives/37/