背景是這樣的: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個容器在一個虛擬內網網段裏 , 你也寫網段裏的內網地址 .