Назад | Перейти на главную страницу

Соединения обратного прокси Apache2 остаются постоянными, заполняя каналы ssh

У меня есть веб-сервер (экземпляр Amazon Linux EC2 с Apache2), назовем его «сервером 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 для туннеля? (конфиг для этого может быть предоставлен при необходимости).

К сожалению, похоже, что это известная ошибка с Apache и кодом mod_proxy: https://issues.apache.org/bugzilla/show_bug.cgi?id=51814

Я перешел на альтернативное решение.