Grails Apache2反向代理,为什么我的解决方案与示例不匹配?
我需要为运行grails应用程序的tomcat服务器创建一个反向代理。 我经常看到这样的反向代理示例:Grails Apache2反向代理,为什么我的解决方案与示例不匹配?,grails,tomcat7,reverse-proxy,apache2.2,Grails,Tomcat7,Reverse Proxy,Apache2.2,我需要为运行grails应用程序的tomcat服务器创建一个反向代理。 我经常看到这样的反向代理示例: ProxyRequests Off ProxyPass / http://localhost:8080/appname/ ProxyPassReverse / http://localhost:8080/appname/ ProxyPreserveHost On 但在我所有的应用程序中,当我这样做时,页面会弹出,我的静态数据会像这样加载到上下文中: /appname/static/[jsap
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:而不是。如果可能的话,我更喜欢晚一点的,而且不失风格
注:
- 当我转到基本URL时:http://servername.com 它工作得很好,之后我单击的任何链接都会将“/appname/”名称放入URL
- 我相信我可以通过将tomcat上的应用程序设置为根应用程序来解决这个问题,但是我不希望这样
- 这个例子使用的是HTTP,我通常使用AJP协议,但我最后尝试了HTTP只是为了好玩
- 这是在NameVirtualHost配置中
- Apache 2.2.15、Tomcat 7.0.27、CentOS 6.2版(最终版)、java版本“1.7.0_04”、Grails 2.0.4
谢谢。有几种方法,如何解决这种情况。我在TomCat中使用vhost,因此我在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 "%r" %s %b" />
<Context path="/thumbnails" docBase="/var/www/myapp/thumbnails" reloadable="true">
</Host>
最后一点可以帮助您在UrlMappings.groovy中设置“静态”目录。将URL转换为控制器时忽略这些目录,反之亦然:
static excludes = [
'/css*', '/js*', '/thumbnails*'
]
很好,我马上就来试试。但是,如果我有一台8080上有tomcat和8080上有httpd的服务器,我想我需要额外的步骤来编辑主机文件,以便反向代理知道myapp在哪里,因为localhost:8080不再工作了。我将报告我的结果,再次感谢。您可以将“主机”中的属性“name”更改为您需要的任何内容,然后可以在/etc/hosts中配置该属性,代理可以访问。因此,我将qas.1作为名称,在/etc/hosts中,我有127.0.0.1 qas.1,并将代理配置为:ProxyPass/但它将启动tomcat localhost,而不是我的应用程序。我首先尝试了别名,结果相同。有什么想法吗?我没有意识到这只是传递了整个名字,我想得太多了。我现在拿到了,谢谢你的帮助。
static excludes = [
'/css*', '/js*', '/thumbnails*'
]