Apache2反向代理,为什么我的解决方案永远不会与示例匹配?

时间:2012-06-26 03:47:18

标签: grails tomcat7 reverse-proxy apache2.2

我需要将反向代理发送回运行grails应用程序的tomcat服务器。 我一直看到像这样的反向代理示例:

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

在我的所有应用程序中,当我这样做时,页面出现,我的静态加载如下: 的 /应用程序的名字/静态/ [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

我猜是反向反向代理;无论哪种方式,它似乎hacky和(我认为)一个副作用;它创建了包含tomcat上下文的URL:http://servername.com/appname/user/username而不是http://servername.com/user/username。如果可能的话,我会更喜欢后者,而不会失去造型。

注意:

  • 当我转到基本网址时:http://servername.com它工作正常,我点击后的任何链接都会显示" / appname /" URL中的名称。
  • 我相信我可以通过在tomcat上使用应用程序来解决这个问题,但是,我不愿意这样做。
  • 这个例子是使用HTTP,我通常使用AJP协议,但我最后尝试使用HTTP for kicks
  • 这是在NameVirtualHost配置中。
  • Apache 2.2.15,Tomcat 7.0.27,CentOS 6.2版(最终版),java版本" 1.7.0_04",Grails 2.0.4

对于我需要采取哪些不同的做法?

感谢。

1 个答案:

答案 0 :(得分:1)

有几种方法,如何解决这种情况。我在TomCat中使用vhosts,所以我删除了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*'
]