我使用grails应用程序作为Flex前端的后端。为了能够轻松地开发和调试我的应用程序,我需要将crossdomain.xml文件放入服务器的根目录,即必须可以通过http://localhost:8080/crossdomain.xml访问它。类似的用例可能是部署了favicon.ico或robots.txt,但是这可以通过带有默认根Web应用程序的tomcat服务器在生产环境中完成。
在我的情况下,我需要在运行grails run-app之后使用crossdomain.xml。我知道我可以将整个应用程序移动到根目录(http://ca.rroll.net/2009/03/27/configuring-the-grails-root-application-context/)但是这也不是我想要的,因为grails应用程序应该仍然位于其默认应用程序上下文之下。
有人知道,我怎么能这样做?我是否必须以某种方式重新配置我的grails安装的jetty servlet容器?
答案 0 :(得分:1)
我想我找到了答案。我还没试过,所以YMMV。
在此article中,Colin Harrington讨论了通过部署额外的Jetty上下文在服务器的根目录下提供crossdomain.xml文件。
他的技术首先在此博客entry中提出,其中作者还讨论了使用Static Resources Plugin作为另一种选择
答案 1 :(得分:0)
我找到了用Apache和mod_proxy解决这个问题的方法。这允许您的Grails安装和Grails项目保持原始状态。没有黑客攻击Grails内部,没有添加插件,你可能不需要在生产中。
<强> 1。安装Apache httpd 2.2
这样做对您的操作系统最有意义。安装Apache 2.2非常重要。我在Ubuntu系统上做了这个,所以任何特定的命令和文件位置都将用于Ubuntu。根据您的系统的需要进行修改。
安装Apache后,启动httpd。
sudo /sbin/service httpd start
使用网络浏览器测试它是否正确安装。
<强> 2。创建根目录
选择磁盘上保存静态文件的位置。这将是httpd的文档根目录。我将使用/ var / grails_root。
mkdir /var/grails_root
touch /var/grails_root/crossdomain.xml
第3。在httpd.conf中创建一个VirtualHost
在您喜欢的文本编辑器中打开httpd.conf。
vim /etc/httpd/conf/httpd.conf
选择您喜欢的端口,并在该端口上创建虚拟主机。我将使用9090,但任何端口都可以。
将这些行添加到httpd.conf
Listen 9090
<VirtualHost *:9090>
DocumentRoot "/var/grails_root"
<Directory "/var/grails_root">
Allow from all
</Directory>
</VirtualHost>
重新启动httpd
sudo /sbin/service httpd restart
测试您现在是否能够访问文档根目录中的静态文件。如果没有,您需要先解决此问题,然后再继续下一步。
<强> 4。启用mod_proxy和mod_proxy_http
您需要加载这两个模块。 mod_proxy具有代理的基本功能,mod_proxy_xxx模块具有特定于协议的信息。它们标配httpd 2.2,所以你不需要安装任何额外的东西。
将这些行添加到httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
现在修改您在上一步中设置的虚拟主机。 (您可以省略评论)
<VirtualHost *:9090>
DocumentRoot "/var/grails_root"
<Directory "/var/grails_root">
Allow from all
</Directory>
# New lines start here
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /grailsApp http://your.grails.server:8080/grailsApp
# New lines end here
</VirtualHost>
重新启动httpd
sudo /sbin/service httpd restart
现在,您应该可以通过端口9090访问静态文件和Grails应用程序。
这完全基于以下信息:http://docs.codehaus.org/display/JETTY/Configuring+mod_proxy
在其他版本的Apache上执行此操作的信息可在同一站点上获得。