背景是这样的:php
Docker 中 , 一容器 alpine 跑 apache ( 2.4.33 , mpm_event 方式 ) , apache
另外一台容器跑 php-fpm ( 7.2.8 ) , 因此 apache 和 php-fpm 变成了远程联动的模式 . php7
不少设置参照了大量晚上资料调试 , 均报错 :app
AH01071: Got error 'Primary script unknown\n'
php-fpm
逐个配置验证后 , 匪夷所思的发现了问题所在 . 先给下正确配置:调试
1. httpd.conf cdn
* 把 AddType application/x-httpd-php php php7 相似的行清理掉 , 这不是 php-fpm 用的. blog
* 以下相似的段落在 httpd.conf 里边也不须要:ip
<FilesMatch \.php$> SetHandler "proxy:fcgi://php-fpm:9000" </FilesMatch>it
2. 正确的配置仅仅须要这一行就够了:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php-fpm:9000/v/php-fpm/www/$1
这一行放在你的 vhost.conf 的 <VirtualHost> 里.
特别注意 !
1. 个人 DocumentRoot 路径和 ProxyPassMatch 最后的路径是不匹配的 !
( DocumentRoot /v/apache/www ) apache 启动须要实际检测 DocumentRoot 路径存不存在 . 就是说 , 个人数据放在 apache 容器 , 而由 fcgi:// 把数据推过去 php-fpm 容器后 , php-fpm 容器须要读这个 /v/apache/www 路径 , 读不到, 就会报错 AH01071 . 前台页面显示的是 "File not find !"
因此 , 解决的核心思路就是让2个容器有共同可访问的文件地址 . 这个就不赘述了 , 用挂载等方式解决.
2. 注意 php-fpm listen 的设置
\php-fpm.d\www.conf
个人是 listen = 172.0.0.3:9000
这里你不能写 127.0.0.1 , 2个容器在一个虚拟内网网段里 , 你也写网段里的内网地址 .