Прокси-сервер получил недействительный ответ от вышестоящего сервера. Прокси-сервер не смог обработать запрос GET /abcef/report.

Вопрос или проблема

Я получаю следующую ошибку при попытке доступа к веб-адресу.

     Прокси-сервер получил недействительный ответ от upstream-сервера. 
     Прокси-сервер не смог обработать запрос GET /abcef/report. Причина: Ошибка чтения с удаленного сервера Apache/2.2.15 (Red Hat) Сервер на www.abc.nl Порт 80  

Я в замешательстве, потому что то же самое работает, когда я напрямую обращаюсь к IP-адресу и пытаюсь получить доступ к URL. Может кто-нибудь помочь мне разобраться с этой проблемой.
Я искал в Google эту проблему и узнал, что дело может быть в файле vhost.conf.
Мы используем AJP-трансфер с помощью mod_jk для перенаправления с порта 8080 на порт 80 и обратно. Используемые файлы – mod_jk.conf и /etc/httpd/conf/worker.properties. Имя рабочего свойства ajp13, как указано ниже, будет использоваться в конфигурации виртуального хоста
worker.list=ajp13

Я внес некоторые изменения в файлы и попытался проверить, но ничего не работает.
Ниже приведен мой файл vhosts.conf:

NameVirtualHost *:80
<VirtualHost *:80>
ServerName aa.bb.cc.dd
<ifModule mod_headers.c> 
Header set Connection keep-alive 
</ifModule>
RewriteEngine on ....

Пожалуйста, найдите файл httpd.conf

ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
 TraceEnable off
 <IfModule prefork.c>
 StartServers       20
 MinSpareServers    5
 MaxSpareServers    100
 ServerLimit      512
 MaxClients       512
 MaxRequestsPerChild  0
 </IfModule>
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

файл mod_jk:

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogLevel info
JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /zwr* ajp13

workers.properties:

worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.socket_keepalive=true
worker.ajp13.connection_pool_size=10000
worker.ajp13.connect_timeout=5000000
worker.ajp13.prepost_timeout=5000000

Вы пробовали использовать mod_proxy_ajp от httpd вместо mod_jk? Вот краткое сравнение обоих коннекторов (и не только их).

Что вы имеете в виду под “прямым IP”? IP рабочего (в обход прокси)?

Кроме этого, вы можете попробовать прослушать AJP-коммуникацию с помощью утилиты командной строки tcpdump, а затем просмотреть ее, например, в Wireshark. Это покажет вам, если, например, есть неправильно отформатированные заголовки или другие проблемы, которые могут затруднить ваш httpd-обратный прокси, но которые допускаются вашим браузером.

Также обратите внимание на директиву ProxyTimeout от httpd.

Ответ или решение

Ошибка Прокси-Сервера: Получен недействительный ответ от серверов верхнего уровня

Обзор проблемы

Вы столкнулись с ошибкой, указывающей на то, что прокси-сервер получил недействительный ответ от upstream-сервера. Основные выводы из сообщения об ошибке:

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /abcef/report. 
Reason: Error reading from remote server  Apache/2.2.15 (Red Hat) Server at www.abc.nl  Port 80

Вы отметили, что доступ к URL работает при прямом обращении по IP-адресу, что указывает на возможные проблемы конфигурации прокси или сетевого взаимодействия.

Возможные причины и решения проблемы

  1. Конфигурация vhosts.conf:

    • Убедитесь, что конфигурация вашего виртуального хоста правильная. Проверьте, нет ли несоответствий и разрешены ли все необходимые маршруты. Обратите внимание на наличие директив Rewrite и других условий. Рекомендуется включить полные журналы ошибок для отслеживания доступа.
  2. Использование mod_jk:

    • Поскольку вы используете mod_jk для работы с AJP, убедитесь, что у вас правильно настроены свойства работника. Посмотрите, настроены ли таймауты и порты. В вашем файле workers.properties, вы настроили worker.ajp13.port=8009, однако в конфиге mod_jk он должен соответствовать конфигурации сервера приложений, обычно это 8009.
  3. Проблема с соединением:

    • Убедитесь, что сервер приложений (например, Tomcat) работает и прослушивает необходимый порт (8009). Используйте команду netstat -tuln для проверки.
  4. Таймауты:

    • Проверьте настройки таймаутов, как на стороне Apache, так и на стороне вашего приложения. Подумайте о добавлении или изменении директивы ProxyTimeout в вашем httpd.conf. Например:
      ProxyTimeout 600
  5. Анализ трафика:

    • Если проблема остается нерешенной, рассмотрите возможность использования инструментов анализа трафика, таких как tcpdump или Wireshark, для диагностики возможных проблем в AJP-соединении. Например, вы можете захватить трафик следующим образом:
      tcpdump -i any -s 0 -w capture.pcap port 8009
    • Затем проанализируйте полученный файл в Wireshark, чтобы убедиться в целостности заголовков и данных.
  6. Попробуйте mod_proxy_ajp:

    • Если проблема не разрешается, стоит рассмотреть возможность переключения с mod_jk на mod_proxy_ajp. Этот модуль является встроенным в Apache и может предложить более простое и стабильное решение для проксирования запросов к AJP-сервисам.

Заключение

Проблема с недействительным ответом от upstream-сервера может возникать из-за различных факторов, включая конфигурацию сервера, проблемы с соединением или настройки AJP. Постепенное устранение неполадок, начиная с проверки конфигураций и мониторинга трафика, зачастую приведет к успешному решению проблемы. Если указанные решения не помогают, возможно, стоит рассмотреть возможность обращения к профессиональному IT-специалисту или обратиться на форумы поддержки для получения более детальной помощи.

Оцените материал
Добавить комментарий

Капча загружается...