2016-09-23 81 views
0

我有一個tomcat,偵聽端口8080和apache httpd的監聽端口80和443Tomcat的Apache的背後通過SSL的httpd(httpd的工作,Tomcat的返回錯誤500)

的httpd的代理客戶端通過到tomcat通過ajp。這像一個魅力。

我在上面引用的陳述是錯誤的。我錯誤地認爲我將代理設置爲使用ajp協議,但我確實使用純http。 這也導致了這個問題的答案。

但是,如果我嘗試通過https連接,我會得到一個安全的連接,顯示一個錯誤500,不記錄任何地方。我的猜測是,httpd(443)的https連接正在工作,ajp-proxy也可以工作,但tomcat期望我不知道的東西。

我已經嘗試連接代理端口8443和8080在我看來,這將足以爲Tomcat將在8080端口訪問,因爲所有流量重定向通過反正的httpd。

下面是配置:

的/ etc/apache2的/網站可用/默認的SSL

<IfModule mod_ssl.c> 
    ErrorLog /var/log/apache2/ssl_engine.log 
    LogLevel error 

    NameVirtualHost *:443 

    <VirtualHost *:443> 
      ServerName www.doma.in 
      ServerAlias doma.in 

      ServerSignature Off 
      SSLEngine on 

      SSLCertificateFile /etc/ssl/certs/ssl_certificate.crt 
      SSLCertificateKeyFile /etc/ssl/certs/ssl_certificate.key 
      SSLCertificateChainFile /etc/ssl/certs/intermediate_ca.crt 

      ProxyPass/ajp://localhost:8080/ retry=0 timeout=240 
      ProxyPassReverse/ajp://localhost:8080/ 
    </VirtualHost> 
</IfModule> 

/etc/tomcat7/server.xml

<?xml version='1.0' encoding='utf-8'?> 
<Server port="8005" shutdown="SHUTDOWN"> 
    <Listener className="org.apache.catalina.core.JasperListener" /> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 

    <GlobalNamingResources> 
     <Resource name="UserDatabase" auth="Container"     type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> 
    </GlobalNamingResources> 

    <Service name="Catalina"> 
     <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> 

     <!-- Define an AJP 1.3 Connector on port 8009 --> 
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URLEncoding="UTF-8" /> 
     <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URLEncoding="UTF-8" /> also tried this, but same result. --> 

     <Engine name="Catalina" defaultHost="localhost"> 
      <Realm className="org.apache.catalina.realm.LockOutRealm"> 
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
      </Realm> 

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host> 
     </Engine> 
    </Service> 
</Server> 

可惜我不提供任何日誌,因爲錯誤沒有出現在任何日誌中。

關於如何使這項工作的任何想法?

真誠 ž

+0

通過在代理通行指令(如ProxyPass/ajp:// localhost:8080 /')中匹配斜槓並重試。在旁註中,根本不需要RewriteEngine,所以你也可以刪除它。 –

+0

@ ezra-s我添加了缺少的斜線。不幸的是,這並沒有改變結果。 RewriteEngine是我用於某些url調整的塊的剩餘部分(對於我測試的URL不會生效)。 – zoku

回答

1

答案是很容易的。我不使用ajp,但在未加密的站點上執行簡單的http代理。

那麼,到底是工作的代碼是:

<IfModule mod_ssl.c> 
    ErrorLog /var/log/apache2/ssl_engine.log 
    LogLevel error 

    NameVirtualHost *:443 

    <VirtualHost *:443> 
      ServerName www.doma.in 
      ServerAlias doma.in 

      SSLEngine on 
      SSLCertificateFile /etc/ssl/certs/ssl_certificate.crt 
      SSLCertificateKeyFile /etc/ssl/certs/ssl_certificate.key 
      SSLCertificateChainFile /etc/ssl/certs/intermediate_ca.crt 

      ProxyPass/http://127.0.0.1:8080/ 
      ProxyPassReverse/http://127.0.0.1:8080/ 
    </VirtualHost> 
</IfModule> 

性能方面的AJP協議將是優選的這一點,雖然。

+0

如果我理解它是正確的,當你說「httpd通過ajp代理客戶端到tomcat時,你有點矛盾,這就像一個魅力。」現在你說「我不使用ajp,而是在未加密的站點上做一個簡單的http代理」。 –

+1

你是絕對正確的!我糾正了我對這個問題的陳述。我不確定是否需要這個問題,因爲這個錯誤非常明顯,僅僅在我身邊。 – zoku