到目前为止,我一直在使用 Ubuntu 16.04.5 Server,其中 Apache、Nginx 作为反向代理、PHP 7.0 + FastCGI + FPM,所有内容都已更新至最新版本。一切顺利。
这是一个 Apache 虚拟主机,例如 x.com:
<VirtualHost *:8080>
ServerName x.com
ServerAlias www.x.com
ServerAdmin [email protected]
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 池 .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 [email protected]
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>
现在,这对我来说不起作用,即使我删除了纤维增强塑料个人配置文件文件。我根本就不明白这行代码的作用SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
,或者这行代码如何能够取代大家一直在使用的更大的代码块快速CGI这些年来。
有人可以解释一下吗?
提前致谢。
答案1
嗯,区别很简单。您的处理程序工作方法由 提供支持,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
系统中不存在的标准。尝试使用时,您应该使用与 FPM 配置(和工作配置)中显示的完全相同的套接字名称,mod_proxy_fcgi
并且|fcgi://localhost/
由于您的 FPM 仅在 UNIX 套接字上监听,因此也应将其删除。