apache - Tomcat/Apache/Grails 配置

标签 apache tomcat grails

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

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 时,我得到的 url 呈现(我认为是正确的)为 https://www.xyz.com/anotherApp但是有一个 404 错误说“找不到对象”..

谁能帮我配置一下?是否可以在不同的端口上有 2 个连接器 使用相同的代理名称?正如我所说,我不熟悉 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 和虚拟主机?如果我很愚蠢,请原谅我——我没有太多接触过网络应用程序,而且我似乎已经停止了我认为应该相对容易的东西——部署!

最佳答案

如果你想在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 可能是个好主意。

关于apache - Tomcat/Apache/Grails 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333817/

相关文章:

grails - 如何正确连接Gr​​ails中的两个消息属性?

mongodb - 适用于grails 2.3.0的mongodb gorm插件版本?

apache - 如何使用 Plesk 编辑 php.ini 文件

tomcat - 通过托管在同一个 Tomcat 中的 servlet 重新启动 Tomcat 服务

java - 已为此响应调用 Tomcat、Comet 和 getOutputStream()

java - ServletContext - 应用程序范围的 session 对象返回 null

grails - Cobertura Grails代码覆盖率

windows - 禁用 Apache 中 *nocache* 文件的缓存

php - 服务器和客户端指示的 HTTPS 不匹配

apache - URL 仅适用于 https 而不适用于 http