У меня есть веб-сервер (экземпляр 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
Я перешел на альтернативное решение.