2

我需要将反向代理返回到运行 grails 应用程序的 tomcat 服务器。我总是看到这样的反向代理示例:

ProxyRequests Off
ProxyPass / http://localhost:8080/appname/
ProxyPassReverse / http://localhost:8080/appname/
ProxyPreserveHost On

但是,在我所有的应用程序中,当我这样做时,页面会出现并且我的静态数据会像这样加载上下文:/ appname/static/ [jsapp.js][mycss.css]

因此,样式和功能都丢失了。所以我的解决方法是这样做:

ProxyRequests Off
ProxyPass /appname/ http://localhost:8080/appname/
ProxyPass / http://localhost:8080/appname/
ProxyPassReverse /appname/ http://localhost:8080/appname/
ProxyPassReverse / http://localhost:8080/appname/
ProxyPreserveHost On

我猜这是一个反向反向代理;无论哪种方式,它看起来都很老套,并且(我认为)有副作用;它在其中创建带有 tomcat 上下文的 URL:http://servername.com/appname/user/username而不是http://servername.com/user/username。如果可能的话,我会更喜欢后者,而不会丢失样式。

笔记:

  • 当我转到基本 URL:http://servername.com 时,它工作正常,之后我单击的任何链接都会在 URL 中添加“/appname/”名称。
  • 我相信我可以通过将tomcat上的应用程序设置为ROOT应用程序来解决这个问题,但是,我不希望这样做。
  • 此示例使用 HTTP,我通常使用 AJP 协议,但我最后尝试 HTTP 只是为了好玩
  • 这是在 NameVirtualHost 配置中。
  • Apache 2.2.15、Tomcat 7.0.27、CentOS 6.2 版(最终版)、java 版本“1.7.0_04”、Grails 2.0.4

关于我需要做不同的事情有什么想法吗?

谢谢。

4

1 回答 1

1

有几种方法,如何解决这种情况。我在 TomCat 中使用虚拟主机,所以我删除了 URL 中的应用程序名称。将此添加到您的 server.xml

<Host name="myapp.com"  appBase="myappbase" unpackWARs="true" autoDeploy="false">
    <Alias>www.myapp.com</Alias>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="myapp_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

    <Context path="/thumbnails" docBase="/var/www/myapp/thumbnails" reloadable="true">

</Host>

在您的 $TOMCAT_HOME 中创建一个目录“myappbase”,将您的应用程序 WAR 上传为 ROOT.war。您的应用程序可通过http://myapp.com:8080/获得。

您的代理配置非常简单;-) 您还可以在 1 个 TomCat 中创建更多虚拟主机。

在上述配置中还有一个目录别名(缩略图),可通过http://myapp.com/thumbnails/访问,您可以通过以下方式在 GSP 中使用它:

${ resource( dir: 'thumbnails', file: 'image01.png' ) }

最后一点,可以帮助您在 UrlMappings.groovy 中设置“静态”目录。将 URL 转换为控制器时会忽略这些目录,反之亦然:

static excludes = [
        '/css*', '/js*', '/thumbnails*'
]
于 2012-06-26T11:21:35.497 回答