Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails Apache2反向代理,为什么我的解决方案与示例不匹配?_Grails_Tomcat7_Reverse Proxy_Apache2.2 - Fatal编程技术网

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

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

我需要为运行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:而不是。如果可能的话,我更喜欢晚一点的,而且不失风格

注:

  • 当我转到基本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 &quot;%r&quot; %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*'
]