我无法正确配置 Web 服务器的反向代理。我在这里和其他地方查找过类似问题的解决方案,但似乎没有一个对我有帮助。以下是设置:
我有一个 Apache 代理服务器,用于处理环境中虚拟 Web 服务器的请求(全部在 ubuntu 16.04.1 上)。DNS 由外部(Cloudflare)处理并指向我的一个公共 IP 地址。我的目标是让代理服务器将请求传递给正确的虚拟 Web 服务器。
我有一个内部 DNS 服务器,并且已确认虚拟 Web 服务器运行正常(所有服务器都可以访问内部请求),但是当尝试进行外部访问时,我无法解析任何一个服务器。
以下是我对代理服务器虚拟主机的配置:
ServerName foo.com
ProxyRequests off
ProxyPass / http://foo.com/
ProxyPassReverse / http://foo.com/
这似乎会导致超时。这是我在代理服务器上的 apache 日志中收到的错误:
[proxy_http:error] [pid 28581] (70007)The timeout specified has expired: [client 127.0.0.1:41410] AH01102: error reading status line from remote server foo.com:80, referer: http://foo.com
[proxy:error] [pid 28581] [client 127.0.0.1:41410] AH00898: Error reading from remote server returned by /, referer: http://foo.com
正如其他类似问题所建议的,我在代理服务器上的 apache 配置中添加了以下几行:
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
但是,现在外部请求在大约 60 秒后会抛出 502,具体说明:
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.
Reason: Error reading from remote server
我也在代理服务器上为我的虚拟主机尝试过这个:
ServerName foo.com
ProxyRequests off
ProxyPass / http://10.0.0.1/
ProxyPassReverse / http://10.0.0.1/
这会导致重定向循环。
我很乐意提供有关我的配置的更多详细信息。
答案1
我放弃了最初的配置,因为我认为其中有一些残留的 SSL 配置与代理服务器不合适/不兼容,从而导致重定向循环。重新设置整个代理服务器并重新测试后,得到了预期的结果(通过代理从外部访问 Web 服务器)。