Grails 是否了解子域(即 subdomain.domain.com)?我没有在手册中看到它讨论过。这纯粹是一个应用服务器/网络服务器问题吗?可以静态或动态地绑定到 grails 控制器中吗?
3 回答
对于 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 服务器以将这些请求重定向到在您的应用程序服务器上运行的适当应用程序。
我们使用各种子域在单个主机上运行一些 Grails 应用程序。在所有情况下,我们都使用 Apache 作为 Tomcat 服务器的前端,并使用 mod jk 或转发代理来处理不同 Grails 应用程序的应用程序。其中大部分是相当直接的,我们没有想到的是在各个域的根级别运行应用程序,例如 - http://app1.domain.com而不是http://app1.domain.com /app1
我知道考虑子域的唯一地方是在使用多租户插件时用于租户解析。请参阅http://tinyurl.com/6tuxwvs。