那里有很多文档说明您应该使用其他各种方式(包括简单的代理),但是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/

10-06 06:56