Tomcat 到 Grails 中的 Apache 代理/URL 子目录
Posted
技术标签:
【中文标题】Tomcat 到 Grails 中的 Apache 代理/URL 子目录【英文标题】:Tomcat to Apache Proxy / URL Sub Directory in Grails 【发布时间】:2016-06-16 05:40:26 【问题描述】:使用 Auto Scaling Elastic Load Balancer 在 AWS Elastic Beanstalk 上运行 Grails Web 应用程序。
我们有另一个 AWS EC2 实例运行我们的博客,即。 blog.domain.com
有没有办法将流量从 domain.com/blog 路由到博客 EC2 实例?我知道使用 Apache,您可以代理传递到 Tomcat 实例,但是您可以反过来做吗?如果是这样,它甚至可以与 Auto Scaling 一起使用吗?
【问题讨论】:
【参考方案1】:您可以在您的 grails 应用程序中将 /blog
配置为控制器,其方法如下:
class BlogController
def index()
redirect(url: "http://blog.domain.com")
编辑:我的回答不适合指定它是代理而不是重定向的问题......所以这是我的修改版本:
我采用了此处提供的现有 Java 代理 servlet 代码:http://edwardstx.net/2010/06/http-proxy-servlet/,并在此处实现了 Grails 控制器:https://github.com/AtlasOfLivingAustralia/biocache-hubs/blob/master/grails-app/controllers/au/org/ala/biocache/hubs/ProxyController.groovy(太大无法粘贴)
将以下内容添加到您的 URL 映射文件中:
"/blog/$path**" (controller: 'proxy')
action = [POST:'doPost']
"/blog/$path**" (controller: 'proxy')
action = [GET:'doGet']
我认为根据记忆,这段代码期望 $path
是一个完整的 URL,您可能希望将 URL 前缀存储在一个字段中,并且只传递链接中的路径部分(如果这有意义的话)。请注意,您不会显示任何布局等,它只会重现在其他应用程序中创建的页面。您可以使用 cache plugin 为其添加一些缓存。
编辑 2:此代码可能对您的要求有点过分,您最好编写一个简单的 GET 服务,然后将其发送回客户端...就像此处所述 Writing a proxy in grails
【讨论】:
重定向只会加载新的 URL,对吧?我希望在 domain.com/blog 上拥有整个博客,这样实际上就没有人需要访问 blog.domain.com。这就是我想到代理的原因。 好的,我错过了代理位,抱歉。我已经实现了几次这样的代理——基本上你必须自己做。创建一个服务来执行 GET,然后使用render
或 response
方法之一直接将内容传递给浏览器。如果你需要,我可以挖掘代码。
如果不是太麻烦,将不胜感激。目前我认为我唯一的其他选择是代理服务器......
添加到我上面的答案中。以上是关于Tomcat 到 Grails 中的 Apache 代理/URL 子目录的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache/Tomcat + 虚拟主机部署多个 grails 应用程序
如何在一个 Tomcat + Apache 上部署多个 Grails 应用程序?
Grails项目BuildConfig.groovy Tomcat插件版本?