Apache сервер выполняет обратное проксирование другого apache сервера, получая сообщение «AH01102: ошибка чтения строки состояния с удаленного сервера» - PullRequest
1 голос
/ 11 июля 2020

У меня установлено два сервера 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 с поддержкой сайтов:

  1. SetEnv proxy-initial-not-pooled 1
  2. SetEnv force-proxy-request-1.0 1
  3. SetEnv proxy-nokeepalive 1
  4. ProxyTimeout 600
  5. ProxyPass / http://[apache2-ip-address]:27300/ timeout=600
  6. 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 находится за пределами сети организации. Если это окажется проблемой, это будет настоящий облом.

...