2015-04-05 48 views
2

有很多文件解释说你应该使用各种其他的东西(包括简单的代理),但AJP是灵活和快速的,它真的帮助我整合我们的SAML2 SSO而没有任何的网络应用程序不必担心这些。弹簧引导面向Apache和AJP

我现在试图得到一个春季启动应用程序工作相同的方式,并有一个非常可怕的时间。主要症状是 “错误的网关” 与像错误信息:

[错误] ajp_get_reply :: jk_ajp_common.c(2126):(boot_worker_1)的Tomcat 关闭或拒绝连接。无响应已被发送到客户端 (还)

[信息] ajp_service :: jk_ajp_common.c(2623):(boot_worker_1)发送 请求到Tomcat失败(可恢复),因为协议错误 (尝试= 1)

[错误] ajp_connection_tcp_get_message :: jk_ajp_common.c(1289):从127.0.0.1:8092

错误 消息格式0x4854最后一个看起来像一个线索,但我一直没能找到它。

春季启动手册似乎表明,如果你只有一个连接,你可以在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,因为它只是复杂的事情,和一旦你花时间在动物园管理员,卡夫卡等不安全的世界中,你会在一段时间后放弃并且认为你的ESB是RFC1918并且无论如何都是防火墙)。

我的问题是:

1)可这一切真的做到与属性文件,以及如何?

2)通过上面的硬编码配置,我可以telnet到端口8092并发出GET请求...我不确定为什么我可以这样做,因为这些GET是http,并且我已将协议配置为AJP/1.3所以我不认为它应该工作。但是,这是Apache的问题吗?我找不到任何“错误消息格式0x4854”或错误“-11”的解释。

--Chris

回答

3

我有同样的问题,并通过添加连接器实现解决。

例如: https://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html#Common_Attributes (协议)

或简单地指定协议(AJP代替HTTP)::

Connector ajpConnector = new Connector("AJP/1.3"); 
+0

这可能具有

Connector ajpConnector = new Connector("org.apache.coyote.ajp.AjpNioProtocol"); 

可用的实现的列表拯救了我的生命,非常感谢。 – Mike 2016-01-06 17:45:49

+0

http://www.appsdev.is.ed.ac.uk/blog/?p=525有一个基于属性的例子。 – pdorgambide 2016-12-17 08:46:47