我有一个奇怪的问题,看起来像一个错误。
我使用apache 2.2作为一个简单的转发代理。
另一台服务器(相同操作系统,相同版本)上的相同安装程序也可以使用
我只需安装apache2并启用模块proxy , proxy_http和proxy_connect并设置适当的身份validation方法。
正常的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
我读了一些错误报告,并search错误,发现一些东西,在反向代理设置和设置一些环境variables来禁用保持活着,但它并没有解决问题。
奇怪的是,在另一台服务器上,它似乎工作得很好!
有人可以指出我正确的方向与这个错误?
编辑:
服务器在Ubuntu 10.04.3 LTS上运行,但是我也在运行Ubuntu 10.04 LTS的testing服务器上重现了这个问题
确切的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"
我的configuration不同于默认的是:
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升级,因为我怀疑maby更新导致此错误。 但是在ugprade和apache重新启动后,一切仍然正常。
我想我必须(不知道)在其他服务器上做了些什么,但是我不知道它会是什么。 Maby我安装了一个缺失的软件包或库?
我从一个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
哇,可能会有很多错误。 你有多确定你的Apache2代理是用SSL支持编译的(不是说它需要,但可能有帮助)? 您列出的编译选项不显示此。 另外,你能告诉我们你的目标SSL服务器是什么? 它也是一个Apache2服务器? 如果是这样,它是监听所有接口或只是本地主机?
如果将Apache环境variables设置为“proxy-initial-not-pooled”,会发生什么情况?
像往常一样,解决办法是微不足道的,而且是愚蠢的原因。
我有一个ProxyMatch规则定义干扰configuration。
谢谢你的帮助。