У меня установлено два сервера apache на двух отдельных физических машинах. Моя текущая настройка:
Apache 1 (Reverse Proxy) <===> Apache 2
Обе версии apache сервера Apache/2.4.29 (Ubuntu)
работают на Ubuntu 18.04.4 LTS
, и их файлы /etc/apache2/apache.conf
идентичны.
Apache 1 сайты- Включенная конфигурация:
<VirtualHost *:80>
ServerName subdomain.domain.tld
ServerAlias www.subdomain.domain.tld
ServerAdmin webmaster@domain.tld
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests off
ProxyPreserveHost On
ProxyPass /maintenance_page !
ProxyPass / http://[apache2-ip-address]:27300/
ProxyPassReverse / http://[apache2-ip-address]:27300/
</VirtualHost>
Apache 2 конфигурации с поддержкой сайтов:
<VirtualHost *:27300>
ServerName subdomain.domain.tld
ServerAlias www.subdomain.domain.tld
ServerAdmin webmaster@domain.tld
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorDocument 400 /notfound.html
ProxyRequests off
ProxyPreserveHost on
</VirtualHost>
Если я напрямую нажимаю http://[apache2-ip-address]:27300/
из веб-браузера, появляется целевая страница сервера apache хорошо. Если я ввожу http://subdomain.domain.tld
в браузер, я получаю сообщение об ошибке прокси:
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request
Я зарегистрировал трассировку на обоих apache серверах. Apache сервер 2 получает прокси-запрос от apache сервера 1 и возвращает ответ статуса 200 на apache сервер 1. Поток прерывается на apache сервере 1, где я вижу следующие журналы:
[Sat Jul 11 20:34:08.671267 2020] [proxy:debug] [pid 32275:tid 140388069250816] proxy_util.c(3075): AH00962: HTTP: connection complete to [apache2-ip-address]:27300 ([apache2-ip-address])
[Sat Jul 11 20:34:08.671333 2020] [core:trace6] [pid 32275:tid 140388069250816] core_filters.c(525): [remote [apache2-ip-address]:27300] core_output_filter: flushing because of FLUSH bucket
[Sat Jul 11 20:34:08.677508 2020] [proxy_http:error] [pid 32275:tid 140388069250816] (104)Connection reset by peer: [client xx.xxx.xxx.xx:39014] AH01102: error reading status line from remote server [apache2-ip-address]:27300
[Sat Jul 11 20:34:08.677575 2020] [proxy_http:debug] [pid 32275:tid 140388069250816] mod_proxy_http.c(1324): [client xx.xxx.xxx.xx:39014] AH01105: NOT Closing connection to client although reading from backend server [apache2-ip-address]:27300 failed.
[Sat Jul 11 20:34:08.677624 2020] [proxy:error] [pid 32275:tid 140388069250816] [client xx.xxx.xxx.xx:39014] AH00898: Error reading from remote server returned by /
[Sat Jul 11 20:34:08.677681 2020] [proxy:debug] [pid 32275:tid 140388069250816] proxy_util.c(2192): AH00943: HTTP: has released connection for ([apache2-ip-address])
[Sat Jul 11 20:34:08.677724 2020] [http:trace3] [pid 32275:tid 140388069250816] http_filters.c(1128): [client xx.xxx.xxx.xx:39014] Response sent with status 502, headers:
Из нескольких других обсуждений, которые я смог найти в Интернете, я пробовал следующие изменения в конфигурации apache server 1 с поддержкой сайтов:
SetEnv proxy-initial-not-pooled 1
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ProxyTimeout 600
ProxyPass / http://[apache2-ip-address]:27300/ timeout=600
ProxyPass / http://[apache2-ip-address]:27300/ nocanon
Я в значительной степени переборщил ситуацию с помощью нескольких комбинаций вышеуказанных настроек, но, похоже, ничего не работает. Любая помощь приветствуется.
Дополнительная проверка, которую я выполнил, заключается в том, если я запускаю приложение nodejs или python flask на том же компьютере, что и серверы apache, и проксирую службу, используя ProxyPass / http://localhost:[port]/
, настройка работает исправно. Таким образом, оба сервера apache работают нормально и могут прокси-сервисы на своих соответствующих локальных хостах. Все, что нарушается, связано с обменом данными между двумя серверами apache.
ОБНОВЛЕНИЕ: При дальнейшей сортировке с использованием curl
с сетевым специалистом проблема, похоже, заключается в том, что брандмауэр org разрешает только входящий трафик c на apache сервер 2 и блокирует исходящий трафик c, который может вызывать 502 ошибки на apache сервере 1. Это не казалось проблемой, пока я не понял, что мой портативный компьютер был подключен к сети организации через VPN все время во время тестирования, и apache сервер 1 находится за пределами сети организации. Если это окажется проблемой, это будет настоящий облом.