playframework,你可以在主机名/子域上路由吗?

Posted

技术标签:

【中文标题】playframework,你可以在主机名/子域上路由吗?【英文标题】:playframework, can you route on hostname/subdomains? 【发布时间】:2012-02-04 20:49:57 【问题描述】:

我们正在将一个 seam 应用程序(2 个应用程序)移植到一个 play 应用程序,以测试现在的游戏(嗯,移植更难的场景......到目前为止,一切都很好)。

我们希望能够在主机名上路由根 / 目录。为了 http://alvazan.com/ 我们想路由到我们的 home.html 页面,但是对于

http://*.premonitionx.com/ 我们要路由到仪表板(如果未登录,它将重定向到登录页面)。

最后,我们要路由 http://premonitionx.com/ 重定向到 alvazan.com 网页。

另外,我们会喜欢这样的路线

http://company.premonitionx.com/project/release

在游戏框架中甚至可能吗????在开发模式下,我们现在有这些 url 可以在 seam 中使用

http://company.dev.premonitionx.com 这样我们就可以在我们的本地机器上测试并测试不同的公司等(如您所知,如果总是这样,许多测试就无法测试)本地主机)

谢谢, 院长

【问题讨论】:

【参考方案1】:

有些文档更难找到。我在任何真实文档中都找不到它,但我记得它是发布的一部分...

http://www.playframework.org/documentation/1.1/releasenotes-1.1#routeHost


路由中的虚拟主机

路由文件现在支持主机匹配。如果必须从主机参数中提取操作参数,这将很有用。例如,对于 SAAS 应用程序,您可以使用:

GET    client.mysoftware.com/         Application.index

然后像任何其他请求参数一样自动检索客户端值:

public static void index(String client) 
    // ...

【讨论】:

所以对于 http,当然。对于https,它不起作用,因为您需要每个域的证书和每个域的SSLEngine,而netty不支持使用多个SSLEngine,据我所知。我用我们自己的 nio 层解决了这个问题,这样我们就可以在这个网络服务器上支持多个域而不是 github.com/deanhiller/webpieces【参考方案2】:

我认为通过routes 文件进行的虚拟主机正在运行,2.x 版不再可用。

但是您可以做的是准备一个控制器来代理此类请求。这是我在 play 2.8.x 中运行的示例代码:

@Singleton
class VirtualHostsController @Inject() (
  langs: Langs,
  ccs: ControllerComponents
) extends AbstractController(ccs) with I18nSupport 

  private val logger = Logger(classOf[VirtualHostsController])

  def index() = Action  implicit request =>
    logger.info(s"Handling Virtual Hosts for $request.host")

    request.host match 
      case "localhost:9000" => Redirect(routes.SomeController.show())
      case "sub.domain.tld" => Redirect(routes.OtherController.show())
      case _ => InternalServerError("unknown domain")
    
  


routes 文件中你可以这样写:

GET     /                  controllers.VirtualHostsController.index()

【讨论】:

谢谢,但我最终找到了原因。 java 并没有真正通过 https 支持它,我创建了自己的平台,托管在您想要的每个域上(每个证书都有 N 个 SSL 证书和一个 SSLEngine)。问题是大多数 nio 层都假设一个!我解析第一个 hello SSL 数据包但不修改。所以我的 webpieces 网络服务器现在支持它github.com/deanhiller/webpieces,而我认为 java 中的其他任何人都不会这样做,因为你必须解析 SSL hello 数据包。

以上是关于playframework,你可以在主机名/子域上路由吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GKE 启用子域

子域名在线扫描 -- dnsdumpster

配置服务器 —— Nginx添加多个二级子域名 --- 2018-06-26

A记录CNAMEMX记录NS记录

关于域名解析|A记录|CNAME等

IIS 站点部署多级域名