apache2.4, php-fpm, proxypassmatch "没有协议处理程序对 URL 有效.."

Posted

技术标签:

【中文标题】apache2.4, php-fpm, proxypassmatch "没有协议处理程序对 URL 有效.."【英文标题】:apache2.4, php-fpm, proxypassmatch "No protocol handler was valid for the URL.." 【发布时间】:2018-06-29 13:09:34 【问题描述】:

我一直试图让 apache2.4 虚拟主机将 php 请求传递给 php5-fpm。

我已将 php5-fpm 配置为侦听套接字,在 /etc/php5/fpm/pool.d/www.conf 中有这一行:

listen = /var/run/php5-fpm.sock

我在这台特定机器上配置的唯一虚拟主机是默认主机。这是我的配置方式:

<VirtualHost *:80>

        DocumentRoot /var/www/html

        ErrorLog $APACHE_LOG_DIR/default-error.log
        CustomLog $APACHE_LOG_DIR/default-access.log combined


        ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:///var/run/php5-
        fpm.sock|fcgi://127.0.0.1/var/www/html/

        DirectoryIndex /index.php index.php


</VirtualHost>

配置完成后,我重新启动了 apache。对测试 php 文件的请求会在错误日志中产生此消息。

[client 10.0.2.2:51434] AH01144:没有协议处理程序对 网址 /info.php。如果您使用的是 DSO 版本的 mod_proxy,请确保 代理子模块包含在配置中,使用 加载模块。

我有理由确定我安装了正确的模块。 'apachectl -M' 返回以下内容:

Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 fastcgi_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_fcgi_module (shared)
 proxy_http_module (shared)
 setenvif_module (shared)
 status_module (shared)

我错过了什么?

【问题讨论】:

【参考方案1】:

这可能是 Debian 中的一个错误。它适用于SetHandler "proxy:fcgi://127.0.0.1:9000/",但不适用于"sock:/var/run/php7.0-fpm.sock"。在你的情况下 php5-fpm.sock。从 socket 切换时要注意端口号 9000。

所以答案是:更改 php-fpm 以监听 ip:port

listen = 127.0.0.1:9000

瞧!

注意:在您的 VirtualHost 定义中尝试LogLevel debug。这是我看到的:

AH01076: url: unix:/run/php/php7.0-fpm.sock/var/www/test.php proxyname: (null) proxyport: 0
AH01077: declining URL unix:/run/php/php7.0-fpm.sock/var/www/test.php

【讨论】:

以上是关于apache2.4, php-fpm, proxypassmatch "没有协议处理程序对 URL 有效.."的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4 + php-fpm - AH01071:出现错误“主脚本未知\n”mod_proxy_balancer

CentOS 7系统LAMP配置PHP-FPM的示例

apache2.4, php-fpm, proxypassmatch "没有协议处理程序对 URL 有效.."

试图让 PHP-FPM 工作 (Apache 2.4.33)

从apache mod_php到php-fpm[转]

apache2.4 + mod_proxy + tomcat7 配置集群和负载均衡