Apache-2.4

需要更改 Apache + PhP-FPM 7.2 的配置嗎?

  • October 7, 2018

到目前為止,我使用的是 Ubuntu 16.04.5 伺服器和 Apache,Nginx 作為反向代理,PHP 7.0 + FastCGI + FPM,一切都更新到了最新版本。一切都很順利。

這是一個 Apache 虛擬主機,例如 x.com:

<VirtualHost *:8080>
   ServerName x.com
   ServerAlias www.x.com
   ServerAdmin x@mail.com
   DocumentRoot /home/user/x.com/site
   ErrorLog /home/user/x.com/logs/error.log
   CustomLog /home/user/x.com/logs/access.log combined
   <Directory /home/user/x.com/site>
       Options -Indexes +FollowSymLinks +MultiViews
       AllowOverride All
   </Directory>
   <IfModule mod_fastcgi.c>
       AddHandler php7.2-fcgi-x.com .php
       Action php7.2-fcgi-x.com /php7.2-fcgi-x.com
       Alias /php7.2-fcgi-x.com /usr/lib/cgi-bin/php7.2-fcgi-x.com
       FastCgiExternalServer /usr/lib/cgi-bin/php7.2-fcgi-x.com -socket /var/run/php/php7.2-fpm.x.com.sock -pass-header Authorization
       <Directory /usr/lib/cgi-bin>
           Require all granted
       </Directory>
   </IfModule>
</VirtualHost>

這是 x.com 的一個 FPM-pool .conf 文件:

[x.com]

user = user
group = www-data

listen = /run/php/php7.2-fpm.x.com.sock

listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

現在我使用的是相同的,但使用的是 Ubuntu 18.04.1,PHP、FPM 等是 7.2。這是一個全新安裝,而不是其他版本的更新。

它似乎工作正常,但我不完全確定,因為我見過幾個人發布這樣的 PHP-FPM 7.2 配置:

<VirtualHost *:8080>
   ServerName x.com
   ServerAlias www.x.com
   ServerAdmin x@mail.com
   DocumentRoot /home/user/x.com/site
   ErrorLog /home/user/x.com/logs/error.log
   CustomLog /home/user/x.com/logs/access.log combined
   <Directory /home/user/x.com/site>
       Options -Indexes +FollowSymLinks +MultiViews
       AllowOverride All
       Require all granted
   </Directory>
   <FilesMatch \.php$>
       # 2.4.10+ can proxy to unix socket
       SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
       # Else we can just use a tcp socket:
       #SetHandler "proxy:fcgi://127.0.0.1:9000"
   </FilesMatch>
</VirtualHost>

現在,這對我不起作用,即使我刪除了FPM單個**.conf文件。而且我根本不明白這行程式碼是做什麼的,或者一個簡單的程式碼行如何替代過去幾年SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"每個人都用於FastCGI的所有更大的程式碼塊。**

有人可以對此有所了解嗎?

提前致謝。

好吧,區別很簡單。您使用處理程序的工作方法得到了支持,mod_fastcgi而第二種方法需要在您的配置中mod_proxy_fcgimod_proxy代理對 FPM 套接字的請求。後者是首選,因為它不需要單獨的配置和記憶體成本mod_fastcgi。在您的情況下,您使用的所有mod_fastcgi功能都只是FastCGIExternalServer將所有機器都帶入其中是有道理的mod_fastcgi

您的問題可能是因為您目前的配置對套接字使用了一個花哨的名稱,也就是說/var/run/php/php7.2-fpm.x.com.sock,您嘗試的配置使用/var/run/php/php7.2-fpm.sock了系統上不存在的標準。當您嘗試使用mod_proxy_fcgi和刪除時,您應該使用與您的 FPM 配置(和您的工作配置)中顯示的完全相同的套接字名稱,|fcgi://localhost/因為您的 FPM 僅在偵聽 UNIX 套接字。

引用自:https://serverfault.com/questions/934297