那里有很多文档说明您应该使用其他各种方式(包括简单的代理),但是AJP灵活且快速,这确实帮助我集成了SAML2 SSO,而无需任何Web应用程序担心这些问题。
我现在正在尝试使Spring-boot应用程序以相同的方式工作,并且经历了一段非常糟糕的时光。主要症状是“错误的网关”,并显示以下错误消息:
最后一个似乎是一个线索,但我一直找不到。
Spring Boot手册似乎建议如果您只有一个连接,则可以在application.properties中进行设置-这是我理想的操作,但是我找不到任何示例。但是,从分发的角度来看,这似乎很理想-发布一个jar,为用户提供文档化的属性文件。
由于那行不通,因此我尝试以编程方式执行以下操作:
@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,并且我已将协议(protocol)配置为AJP/1.3,因此我不认为这应该工作。但这是Apache遇到的问题吗?我找不到“错误的消息格式0x4854”或错误“-11”的任何解释。
- 克里斯
最佳答案
我有同样的问题,并通过添加连接器实现来解决。
例如 :
Connector ajpConnector = new Connector("org.apache.coyote.ajp.AjpNioProtocol");
可用实现的列表:
https://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html#Common_Attributes
(协议(protocol))
或简单地指定协议(protocol)(用AJP代替HTTP):
Connector ajpConnector = new Connector("AJP/1.3");
有关从属性文件动态读取值的完整示例,请参见https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-tomcat-ajp-support-to-a-spring-boot-application/。