Есть много документов, объясняющих, что вы должны использовать различные другие вещи (включая простое проксирование), но AJP является гибким и быстрым, и это действительно помогает мне интегрировать наш SAML2 SSO без каких-либо веб-приложений, которые должны беспокоиться об этом.
Сейчас я пытаюсь заставить приложение с весенней загрузкой работать так же, и это действительно ужасное время. Основным симптомом является «Bad Gateway» с такими сообщениями об ошибках, как:
[ошибка] ajp_get_reply::jk_ajp_common.c (2126): (boot_worker_1) Tomcat не работает или отказывается от соединения. Ответ клиенту не отправлен (пока)
[info] ajp_service::jk_ajp_common.c (2623): (boot_worker_1) отправка запроса на tomcat не удалась (исправимая) из-за ошибки протокола (попытка = 1)
[ошибка] ajp_connection_tcp_get_message::jk_ajp_common.c (1289): неправильный формат сообщения 0x4854 от 127.0.0.1:8092
Последнее казалось подсказкой, но я не смог ее найти.
Руководство по весенней загрузке, похоже, предполагает, что если у вас есть только одно соединение, вы можете настроить его в application.properties - это то, что я хотел бы сделать в идеале, но я не смог найти никаких примеров этого. Однако с точки зрения распространения это кажется идеальным — опубликовать банку, предоставить пользователю документированный файл свойств.
Поскольку это не сработало, я попытался сделать это программно следующим образом:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector ajpConnector = new Connector();
ajpConnector.setProtocol("AJP/1.3");
ajpConnector.setPort(8092);
ajpConnector.setSecure(false);
ajpConnector.setAllowTrace(false);
ajpConnector.setScheme("http");
tomcat.addAdditionalTomcatConnectors(ajpConnector);
return tomcat;
}
(Я действительно не хотел бы настраивать SSL для соединения с локальным хостом, потому что это только усложняет ситуацию, и как только вы проводите время в незащищенных мирах zookeeper, kafka и т. ESB - это RFC1918 и в любом случае защищен брандмауэром).
Мои вопросы:
1) Реально ли это все сделать с файлом свойств и как?
2) С приведенной выше жестко закодированной конфигурацией я могу подключиться по телнету к порту 8092 и отправить запросы GET... Я не уверен, почему я могу это сделать, потому что эти GET являются http, и я настроил протокол на AJP/1.3, поэтому Я НЕ ДУМАЮ, что это должно сработать. Но в этом ли проблема Apache? Я не могу найти объяснения «неправильному формату сообщения 0x4854» или ошибке «-11».
--Крис