Проблема с тайм-аутом шлюза между коннектором AJP и Tomcat 8.5.54 - PullRequest
0 голосов
/ 05 мая 2020

У меня есть сервер tomcat 8, обслуживаемый Apache 2 (2.4.25) в системе debian 9.12 (stretch), и я использую соединитель ajp между apache2 и tomcat. Версия JDK: Oracle JDK 1.8.0_252-8u252-b09-1 ~ deb9u1-b09. Все работало нормально, пока tomcat8 автоматически не обновился до 8.5.54. Но теперь при доступе к приложению через ajp возникает ошибка шлюза тайм-аута 504.

Сервер tomcat8 был автоматически обновлен сегодня утром

Start-Date: 2020-05-05  06:01:41
Commandline: /usr/bin/unattended-upgrade
Upgrade: libservlet3.1-java:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
libtomcat8-java:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-examples:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-admin:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-common:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1), tomcat8:amd64
(8.5.50-0+deb9u1, 8.5.54-0+deb9u1), tomcat8-docs:amd64 (8.5.50-0+deb9u1,
8.5.54-0+deb9u1)
End-Date: 2020-05-05  06:01:52

Ничего не изменилось в файле конфигурации apache2 и tomcat8. Я все еще могу получить доступ к интерфейсу диспетчера tomcat и видеть, как работают мои приложения. Я могу получить доступ к приложениям tomcat с помощью localhost, но не через сервер apache2.

Например, у меня есть приложение QCM1, развернутое на сервере tomcat8. Если я выполняю следующую wget команду

wget http://localhost:8080/QCM1

, ответ правильный, но когда я выполняю

wget http://myserve.mydomain.fr/QCM1

, возникает ошибка тайм-аута шлюза 504

Чтобы включить перенаправление HTTP-запроса на сервер tomcat, в файле конфигурации apache2 есть следующая директива (эта директива работала f ie до обновления tomcat8)

ProxyPass /QCM1 ajp://localhost:8009/QCM1

Что мне не хватает? Спасибо за помощь.

1 Ответ

0 голосов
/ 05 мая 2020

Наконец, я нашел решение, трассировка стека ошибки была:

05-May-2020 16:29:01.292 GRAVE [main]
org.apache.catalina.core.StandardService.startInternal Failed to start connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Le démarrage du gestionnaire de protocole a échoué 
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1086)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)

решение этой проблемы состояло в изменении конфигурации коннектора AJP в файле server.xml и добавить атрибут secretRequired, как предложил Джайндер Чаухан в своем ответе на Springboot - Коннектор AJP настроен с secretRequired = "true", но секретный атрибут имеет значение null или "" после обновления до 2.2.5

<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" secretRequired="false" />

Работает нормально. Но я не уверен, что это лучший и самый безопасный способ продолжения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...