2011-06-13 235 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