Apache2 正向代理无法连接到 https 站点

Apache2 正向代理无法连接到 https 站点

我遇到了一个奇怪的问题,在我看来像是一个错误。

我正在使用 apache 2.2 作为简单的正向代理。

相同的设置在另一台服务器上运行(相同的操作系统,相同的版本)。

我只需安装 apache2 并启用模块proxyproxy_httpproxy_connect设置适当的身份验证方法。

正常的 http 请求可以正常工作,但是 https 请求(经过一段时间的等待后)在浏览器(chrome)中显示以下错误;

Error 111 (net::ERR_TUNNEL_CONNECTION_FAILED): Unknown error.

apache 错误日志显示以下内容:

[Tue Dec 27 18:30:17 2011] [error] [client ***] (20014)Internal error: proxy: error reading status line from remote server ***.com
[Tue Dec 27 18:30:17 2011] [error] [client ***] proxy: Error reading from remote server returned by ***.com:443

我阅读了一些错误报告,并在 Google 上搜索了错误,发现了一些在反向代理设置中的内容,并设置了一些环境变量来禁用保持活动,但这并不能解决问题。

奇怪的是,在另一台服务器上它似乎运行良好!

有人能指出我这个错误正确的方向吗?

编辑:

服务器运行Ubuntu 10.04.3 LTS,但我还在运行的测试服务器上重现了该问题Ubuntu 10.04 LTS

受影响的具体 Apache 版本是:

root@dev:/home/pm-peer# apache2ctl -V
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Nov  3 2011 03:29:23
Server's Module Magic Number: 20051115:23
Server loaded:  APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT=""
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

我的配置与默认配置不同,如下所示:

ServerLimit 1024

ProxyRequests On
ProxyVia Block
ProxyStatus Off

# i tried the following to solve the problem
#SetEnv force-proxy-request-1.0 1
#SetEnv proxy-nokeepalive 1
#SSLProxyEngine on


DefineExternalAuth proxy_auth pipe /home/pm-peer/proxy_auth.php


<Proxy *>

        Allow from 127.0.0.1

        AuthType Basic
        AuthName "Password Required"
        AuthBasicProvider external
        AuthExternal proxy_auth
        Require valid-user

    # tried the following directives also inside the proxy container
    #SetEnv force-proxy-request-1.0 1
    #SetEnv proxy-nokeepalive 1

</Proxy>

我还尝试使用 apt-get upgrade 升级其他一切正常的服务器,因为我怀疑可能是更新导致了此错误。但在升级和 apache 重启后,一切仍然正常。

我想我肯定(在不知不觉中)已经做了某物在另一台服务器上,它能正常工作,但我不知道它是什么。可能是我安装了缺少的包或库?

我从 ubuntu 最小版本开始,安装以下内容,就是这样:

apt-get install -y php5-cli libapache2-mod-php5 php5-curl libapache2-mod-authnz-external logrotate php5-mysql
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_connect
a2enmod rewrite
a2enmod headers
a2enmod authnz_external

答案1

哇,可能有很多问题。您有多确定您的 Apache2 代理是在 SSL 支持下编译的(不是说它需要,但它可能会有帮助)?您列出的编译选项没有显示这一点。另外,您能告诉我们您的目标 SSL 服务器是什么吗?它也是 Apache2 服务器吗?如果是,它是在所有接口上侦听还是仅在本地主机上侦听?

如果将 Apache 环境变量设置为“proxy-initial-not-pooled”,会发生什么情况?

答案2

很多时候,解决方案很简单,而原因却纯粹是愚蠢。

我定义了一个 ProxyMatch 规则,它会干扰配置。

无论如何,感谢您的帮助。

相关内容