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,然后使用 renderresponse 方法之一直接将内容传递给浏览器。如果你需要,我可以挖掘代码。 如果不是太麻烦,将不胜感激。目前我认为我唯一的其他选择是代理服务器...... 添加到我上面的答案中。

以上是关于Tomcat 到 Grails 中的 Apache 代理/URL 子目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache/Tomcat + 虚拟主机部署多个 grails 应用程序

如何在一个 Tomcat + Apache 上部署多个 Grails 应用程序?

Grails项目BuildConfig.groovy Tomcat插件版本?

为啥 Grails(在 Tomcat 中)同时记录到 catalina.out 和我的自定义文件附加程序?

Grails3文件上传maxFileSize限制

Tomcat中的Grails请求参数编码问题