需要更改 Apache + PhP-FPM 7.2 的配置嗎?
到目前為止,我使用的是 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_fcgi
並mod_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 套接字。