Я пытаюсь настроить веб-сервер Apache с помощью приложения Spring Boot, которое использует встроенный Tomcat. До Spring Загрузка я использовал для создания файла ajp.conf, например:
<VirtualHost *:80>
ServerName localhost
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /app ajp://localhost:8009/app
ProxyPassReverse /app ajp://localhost:8009/app
</VirtualHost>
И включите в файл httpd.conf, например
Include /opt/lampp/apache2/conf/ajp.conf
И в файле Tomcat server.xml я использовал его для прослушивания порта 8009
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" connectionTimeout="5000"
Эта настройка работает. Но теперь, используя Spring Boot, я пытаюсь добиться чего-то подобного со встроенным tomcat. Я прочитал Spring Загрузочная документация здесь и добавил в файл application.yml следующие свойства:
server:
port: 8080
tomcat:
remote_ip_header: x-forwarded-for
protocol_header: x-forwarded-proto
Мой файл ajp.conf выглядит так:
<VirtualHost *:80>
ServerName localhost
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /app ajp://localhost:8009/
ProxyPassReverse /app ajp://localhost:8009/
</VirtualHost>
У меня есть мой Spring класс конфигурации загрузки tomcat как
@Configuration
public class TomcatConfiguration {
private final Logger log = LoggerFactory.getLogger(TomcatConfiguration.class);
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createConnector());
tomcat.addContextValves(createRemoteIpValves());
return tomcat;
}
private RemoteIpValve createRemoteIpValves(){
RemoteIpValve remoteIpValve = new RemoteIpValve();
remoteIpValve.setRemoteIpHeader("x-forwarded-for");
remoteIpValve.setProtocolHeader("x-forwarded-protocol");
return remoteIpValve;
}
private Connector createConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
connector.setScheme("ajp");
connector.setProtocol("AJP/1.3");
connector.setRedirectPort(8443);
//connector.setSecure(true);
connector.setPort(8009);
return connector;
}
В моих журналах ошибок apache я вижу:
AH01080: ajp_msg_check_header() got bad signature 4854
[proxy_ajp:error] [pid 24073] AH01031: ajp_ilink_receive() received bad header
[proxy_ajp:error] ajp_read_header: ajp_ilink_receive failed
[proxy_ajp:error] (120007)APR does not understand this error code: [client xx.xx.xx.xx:60916] AH00878: read response failed from (null) (*)
Не уверен, что происходит здесь. Я много раз искал в Интернете, но не мог найти хорошую документацию о том, как обслуживать tomcat за apache с помощью загрузочных приложений Spring. В конце концов, я хотел бы также загрузить несколько экземпляров tomcat.