Grails是否了解有关子域的任何信息(即subdomain.domain.com)?我没有在manual中看到它的讨论。这纯粹是一个应用服务器/ Web服务器问题吗?可以静态地还是动态地绑定到grails控制器中?
答案 0 :(得分:10)
为Java Web应用程序访问哪个主机无关紧要。
假设您在一台主机上分隔了多个客户端,例如customer1.yourhost.com,customer2.yourhost.com等,所有客户都具有相同的功能。
在最简单的情况下,我建议你只使用写一个过滤器,它总会放一些请求变量,如下所示:
def filters = {
all(controller:'*', action:'*') {
before = {
if (request.serverName.contains(".")) {
def clientName =
request.serverName.substring(0, request.serverName.indexOf("."))
request.currentClient = Client.findByClientName(clientName) // e.g.
}
}
}
}
然后,您可以在任何地方检查request.currentClient
当前访问的子域名。
然而,如果它变得更复杂,请查看一些用于grails的多租户插件。
如果您希望每个子域具有不同的功能,例如help.yourhost.com和www.yourhost.com,我建议您编写独立的grails应用程序。然后,您可以设置NGINX服务器,将这些请求重定向到应用程序服务器上运行的相应应用程序。
答案 1 :(得分:1)
我们使用各种子域在单个主机上运行一些Grails应用程序。在所有情况下,我们使用Apache来引导Tomcat服务器并使用mod jk或转发代理来处理不同Grails应用程序的应用程序。其中大部分都是直截了当的,我们还没想到的是在各个域的根级别运行应用程序,例如 - http://app1.domain.com代替http://app1.domain.com/app1
答案 2 :(得分:0)
在使用多租户插件时,我唯一知道要考虑子域名的地方是租户解析。请参阅http://tinyurl.com/6tuxwvs。