docker apache php-fpm AH01071: Got error 'Primary script unknown\n'

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


相關文章
相關標籤/搜索