2015-04-05 116 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