Apache2 反向代理连接保持持久,填充 ssh 通道

Apache2 反向代理连接保持持久,填充 ssh 通道

我有一个 Web 服务器(运行 Apache2 的 Amazon Linux EC2 实例),我们称之为“服务器 A”,我在其上使用以下命令设置了反向代理:

# (All the appropriate modules are loaded higher up in the conf file)
# ...
ProxyRequests off
ProxyPass /booth5/ http://localhost:8005/
ProxyHTMLURLMap http://localhost:8005 /booth5

<location /booth5/>
ProxyPassReverse /
SetOutputFilter  proxy-html
ProxyHTMLURLMap  /        /booth5/
ProxyHTMLURLMap  /booth5  /booth5
RequestHeader    unset  Accept-Encoding
</location>

localhost:8005通过 ssh 连接转发到防火墙后面的服务器的端口在哪里。

该设置运行良好并运行了一段时间,但一段时间后,服务器 A 不会向代理服务器发送任何新请求。

与代理服务器的连接保持正常:

# netstat -napt | grep 8005
tcp        0      0 127.0.0.1:8005              0.0.0.0:*                   LISTEN      22675/sshd          
tcp        1      0 127.0.0.1:38860             127.0.0.1:8005              CLOSE_WAIT      28910/httpd         
tcp        1      0 127.0.0.1:39453             127.0.0.1:8005              CLOSE_WAIT  28548/httpd         
tcp        1      0 127.0.0.1:44596             127.0.0.1:8005              CLOSE_WAIT  28542/httpd         
tcp        1      0 127.0.0.1:38774             127.0.0.1:8005              CLOSE_WAIT  28549/httpd         
tcp        1      0 127.0.0.1:39997             127.0.0.1:8005              CLOSE_WAIT  29889/httpd         
tcp        1      0 127.0.0.1:39135             127.0.0.1:8005              CLOSE_WAIT  28544/httpd         
tcp        0      0 ::1:8005                    :::*                        LISTEN      22675/sshd  

我相信这会“耗尽” ssh 隧道上的所有通道,并且我希望服务器 A 能够以这样的方式运行:它根据需要向代理服务器发送 http 请求,然后清除连接。

最初我怀疑这是由于代理服务器上的 Apache 建立了持久连接,因此我更新了那里的配置以包括:

    # Timeout: The number of seconds before receives and sends time out.
    # Timeout 300
    Timeout 30

    # KeepAlive: Whether or not to allow persistent connections (more than
    # one request per connection). Set to "Off" to deactivate.
    KeepAlive On

    # MaxKeepAliveRequests: The maximum number of requests to allow
    # during a persistent connection. Set to 0 to allow an unlimited amount.
    # We recommend you leave this number high, for maximum performance.
    #MaxKeepAliveRequests 100
    MaxKeepAliveRequests 6

    # KeepAliveTimeout: Number of seconds to wait for the next request from the
    # same client on the same connection.
    KeepAliveTimeout 5

我还没有尝试设置KeepAlive Off。我试图从短/持久连接中获取一些好处,但它们没有关闭。

Apache 配置是解决此问题的正确位置吗?它是隧道的 ssh 配置的一部分吗?(如果需要,可以提供该配置)。

答案1

不幸的是,这看起来像是 Apache 和 mod_proxy 代码的一个已知错误:https://issues.apache.org/bugzilla/show_bug.cgi?id=51814

我现在已经转向替代解决方案。

相关内容