2016-09-23 51 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