SetHandler 指令在 VirtualHost 中失败但在主配置中正常
SetHandler directive failing in VirtualHost but OK in main config
设置为 CentOS 7、Apache 2.4.6、php-fpm 5.6 和 7.3(通过 remi repo)。
我最近将我的默认 phpmod 设置转换为 php-fpm,并且 PHP 5.4.16 工作正常。现在我正在尝试启用 PHP 7.3 作为每个虚拟主机的一个选项。我安装了 php73-php-fpm,然后 运行 查看了 Apache 端。
我的 /etc/httpd/conf.d/php.conf
包括以下指令:
<FilesMatch \.php$>
# SetHandler application/x-httpd-php
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
这适用于所有主机。然后我在一个虚拟主机 .conf 文件中添加了这个 <FilesMatch>
指令:
<VirtualHost *:80>
ServerName www.sittingduck.co.nz
ServerAlias sittingduck.co.nz
DocumentRoot /var/www/sittingduck.co.nz/public_html
ErrorLog /var/log/httpd/sittingduck.co.nz.error.log
CustomLog /var/log/httpd/sittingduck.co.nz.requests.log combined
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9073"
</FilesMatch>
</VirtualHost>
当我重新启动 httpd 服务器时,以下内容出现在上面指定的错误日志中。
[proxy:error] [pid 17061] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9073 (*) failed
[proxy_fcgi:error] [pid 17061] [client 54.36.148.97:33788] AH01079: failed to make connection to backend: 127.0.0.1
验证两个 php-fpm 服务器确实 运行...
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 16794/php-fpm: mast
tcp 0 0 127.0.0.1:9073 0.0.0.0:* LISTEN 17510/php-fpm: mast
...接下来我尝试将主 php.conf 切换到 9073 端口。当我这样做时,所有站点都可以工作,并且我可以确认(使用上面站点上的 php 信息页面)我在 PHP 7.3.
运行
我在这里错过了什么?虚拟主机配置肯定是在 php.conf 之后加载的,正如错误提示的那样,fpm 肯定处于工作状态,并且端口显然可以访问。
我觉得我定义指令的方式有一些规则或警告。任何帮助将不胜感激。
问题是 http 与 https。我的配置文件定义了 *:80 但我不假思索地查看了测试页面的 https 版本。 *:443 虚拟主机位于一个单独的配置文件中,该文件是在 certbot 工具安装后添加的。手动编辑这个额外的文件解决了这个问题。
我仍然不太确定为什么日志中的错误在开始时出现,之后就没有了,但这可能是由于在不同时间通过 http and/or https 请求了特定页面。
设置为 CentOS 7、Apache 2.4.6、php-fpm 5.6 和 7.3(通过 remi repo)。
我最近将我的默认 phpmod 设置转换为 php-fpm,并且 PHP 5.4.16 工作正常。现在我正在尝试启用 PHP 7.3 作为每个虚拟主机的一个选项。我安装了 php73-php-fpm,然后 运行 查看了 Apache 端。
我的 /etc/httpd/conf.d/php.conf
包括以下指令:
<FilesMatch \.php$>
# SetHandler application/x-httpd-php
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
这适用于所有主机。然后我在一个虚拟主机 .conf 文件中添加了这个 <FilesMatch>
指令:
<VirtualHost *:80>
ServerName www.sittingduck.co.nz
ServerAlias sittingduck.co.nz
DocumentRoot /var/www/sittingduck.co.nz/public_html
ErrorLog /var/log/httpd/sittingduck.co.nz.error.log
CustomLog /var/log/httpd/sittingduck.co.nz.requests.log combined
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9073"
</FilesMatch>
</VirtualHost>
当我重新启动 httpd 服务器时,以下内容出现在上面指定的错误日志中。
[proxy:error] [pid 17061] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9073 (*) failed
[proxy_fcgi:error] [pid 17061] [client 54.36.148.97:33788] AH01079: failed to make connection to backend: 127.0.0.1
验证两个 php-fpm 服务器确实 运行...
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 16794/php-fpm: mast
tcp 0 0 127.0.0.1:9073 0.0.0.0:* LISTEN 17510/php-fpm: mast
...接下来我尝试将主 php.conf 切换到 9073 端口。当我这样做时,所有站点都可以工作,并且我可以确认(使用上面站点上的 php 信息页面)我在 PHP 7.3.
运行我在这里错过了什么?虚拟主机配置肯定是在 php.conf 之后加载的,正如错误提示的那样,fpm 肯定处于工作状态,并且端口显然可以访问。
我觉得我定义指令的方式有一些规则或警告。任何帮助将不胜感激。
问题是 http 与 https。我的配置文件定义了 *:80 但我不假思索地查看了测试页面的 https 版本。 *:443 虚拟主机位于一个单独的配置文件中,该文件是在 certbot 工具安装后添加的。手动编辑这个额外的文件解决了这个问题。
我仍然不太确定为什么日志中的错误在开始时出现,之后就没有了,但这可能是由于在不同时间通过 http and/or https 请求了特定页面。