2011-06-13 104 views
0

希望有人可以提供帮助/建议,因为我对Apache/Tomcat不是很熟悉..我已经在部署了grails应用的Tomcat前面安装了Apache。我有IIs设置(通过其他人),它将www.xyz.com/myApp重定向到运行grails应用程序的Apache实例。在我的Apache的conf我有一个代理..Tomcat/Apache/Grails配置

ProxyPass /myApp http://localhost:8080/myApp 
ProxyPassReverse /myApp http://localhost:8080/myApp 

和我在我的tomcat定义的连接器server.xml中

<Connector port="8080" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" 
     proxyName="www.xyz.com" 
     proxyPort="443" /> 

这工作没有任何问题

我现在要添加其它应用程序,以便在IIS中我不得不设置为我www.xyz.com/myOtherApp

ProxyPass /myOtherApp http://localhost:8081/anotherApp 
ProxyPassReverse /myOtherApp http://localhost:8081/anotherApp 

在我的Apache的conf我添加了另一个连接器

<Connector port="8081" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" 
     proxyName="www.xyz.com" 
     proxyPort="443" /> 

当我去www.xyz.com/myOtherApp我得到渲染(正确的,我认为)作为https://www.xyz.com/anotherApp但404错误的URL说“对象没有找到“..

任何人都可以帮助我的配置?是否有可能在不同端口 上有两个连接器具有相同的proxyName?正如我说我不熟悉Apache/Tomcat和我很想得到这个做尽快..

感谢

嗨@Stefan,这些应用都在同一个服务器和域名,所以我对消除了一个连接器定义。我现在离开

<Server port="8005" shutdown="SHUTDOWN"> 

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
<Listener className="org.apache.catalina.core.JasperListener" /> 
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 

<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" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" 
     proxyName="www.xyz.com" 
     proxyPort="443" /> 

    <Engine name="Catalina" defaultHost="localhost"> 

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
     resourceName="UserDatabase"/> 

    <Host name="localhost" appBase="webapps" 
     unpackWARs="true" autoDeploy="true" 
     xmlValidation="false" xmlNamespaceAware="false"> 

    </Host> 

</Engine> 

</Service> 

</Server> 

另外我打开日志记录(JULI),但它似乎没有报告任何东西。 Apache错误日志只是给了我一个404 ..我把它留在HTTP而不是AJP,因为我必须设置HTTPS,我不知道这是多么容易。所以我留下了相同的问题,在一个应用程序的作品,另一个不..可以通过http运行多个grails应用程序,而不是使用ajp和虚拟主机?原谅我,如果我是愚蠢的 - 我没有太多接触webapps,我似乎已经停下来,我认为应该是相对容易 - 部署!

回答

1

如果你想在Tomcat前面使用Apache,最好使用mod_proxy_ajp而不是mod_proxy_http。有关设置,请参阅https://confluence.sakaiproject.org/display/~steve.swinsburg/Fronting+Tomcat+with+Apache+via+mod_proxy_ajp

酸痛到

ProxyRequests Off 
    <Proxy *> 
     Order deny,allow 
     Deny from all 
     Allow from localhost 
    </Proxy> 

添加到您的配置,以防止代理的滥用。

如果/ myApp和/ myOtherApp驻留在相同的tomcat engine中,则只需要一个连接器用于这两个应用程序。除此之外,我可以在您的设置中看到没有明显的错误。也许你可以发布你的tomcat的server.xml。在配置工作期间,使用LogLevel Debug可能是个好主意。

+0

嗨Stefan,应用程序确实生活在同一台服务器和域上,所以我删除了一个连接器定义。我现在只剩下 – user566311 2011-06-14 09:56:45

-1

这不是对你的问题的直接回答,但是我之前在Apache背后配置了Tomcat,并且我遇到了问题。我现在使用Amazons Elastic beanstalk ...您可以直接部署您的Grails应用程序战争文件。它运行的非常漂亮,尤其是在内置的自动缩放和健康监测中!

较少配置==生活易如反掌。

+0

谢谢,也许下一次! – user566311 2011-06-14 19:12:45