首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >允许用户将他们的域名指向我的服务

允许用户将他们的域名指向我的服务
EN

Stack Overflow用户
提问于 2022-07-26 08:06:37
回答 3查看 235关注 0票数 5

我通过client.example.com将我的服务提供给我的用户,下面的页面如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client.mysite.com/blog
client.mysite.com/blog/content/ 
client.mysite.com/docs/ 

等。

我希望允许用户允许他们的域指向这个子域。

因此,他们可以在以下1种选择中任意一种选择:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  client.com -> client.example.com
  sub.client.com -> client.example.com
  client.com/sub/ -> client.example.com

页面应该自动工作,就像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 client.com/blog -> client.example.com/blog
 sub.client.com/blog -> client.example.com/blog
 client.com/sub/blog -> client.example.com/blog

另外,我在Amazon中使用ElasticBean秸秆来使用nginx (Docker )部署我的React应用程序。在我开始之前,我想知道这是否可能,我也不想给我的客户固定的IP地址,以防我失去那个IP。blogger.com、wordpress.com等大公司是如何做到这一点的?

据我所研究,我知道cname可以允许客户端子域,我们需要命名域的IP地址。它没有提到那个文件夹。对于SSL,我可以使用LetsEncrypt。

我对任何类似CloudFlare / Route53方法都没意见。

EN

回答 3

Stack Overflow用户

发布于 2022-07-27 03:11:04

用于SaaS的云彩是为这个用例设计的。您只需转到Cloudflare仪表板> You域(example.com)、->、SSL、->、自定义主机名。添加客户端将链接到的回退主机名,例如ssl.example.com

然后客户端需要在您的应用程序中添加他或她的自定义主机名,然后通过自己的DNS提供程序添加一个CNAME (指向ssl.example.com)和TXT记录来链接和验证他的自定义域。验证和颁发一个新的SSL需要几分钟时间,完全由Cloudflare处理,从此,客户端可以通过自定义主机名(例如client.comsub.client.comclient.com/blog等)访问您的服务。

如果您需要在HTTP响应通过客户的主机名时操作它,也可以通过一个CLoudflare工作脚本(链接到*/* -所有主机名/URL)路由这些请求。

下面是一个示例,说明如何以编程方式创建自定义主机名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as Cloudlfare from "cloudflare-client";

// Initialize custom hostnames client for Cloudlfare
const customHostnames = Cloudflare.customHostnames({
  zoneId: process.env.CLOUDFLARE_ZONE_ID,
  accessToken: process.env.CLOUDFLARE_API_TOKEN,
});

// Add the client's custom hostname record to Cloudflare
const record = await customHostnames.create(
  hostname: "www.client.com",
  ssl: {
    method: "txt",
    type: "dv",
    settings: {
      min_tls_version: "1.0",
    },
  }
);

// Fetch the status of the custom hostname
const status = await customHostnames.get(record.id);
// => { id: "xxx", status: "pending", ... } including TXT records

定价

用于SaaS的CF免费提供100个主机名和$0.10/hostname/mo (来源)。

基于路径的URL转发

如果您需要将HTTP流量转发到不同的端点,例如www.client.com/* (客户域)到web.example.com (SaaS端点),www.client.com/blog/*blog.example.com等等。

您可以通过创建一个具有路由处理*/*请求(所有客户主机名和所有URL路径)的Cloudfalre工作者脚本来实现这一点,该脚本看起来类似于以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  fetch(req, env, ctx) {
    const url = new URL(req.url);
    const { pathname, search } = url;

    if (url.pathname === "/blog" || url.pathname.startsWith("/blog/")) {
      return fetch(`https://blog.example.com${pathname}${search}`, req);
    }

    return fetch(`https://web.example.com${pathname}${search}`;
  }
}

参考文献

票数 5
EN

Stack Overflow用户

发布于 2022-07-28 20:58:07

对此,我已经在scale (10,000+客户端)中实现了最简单的方法,就是:

DNS

  1. 让客户端为特定的client.example.com或一般clients.example.com创建CNAME记录。这既适用于根(设置别名记录),也适用于子域-- IP地址是,而不是,也不是推荐的,因为它不缩放。
  2. 创建一个数据库条目,注册/链接将其域/子域显式链接到其帐户。
  3. 后端控制器中有逻辑,将请求中的主机名与特定客户端(安全措施)相关联,以服务相关内容。

上面的例子实现了前两个用例--它允许客户机将根域或子域链接到您的服务。

要实现第三个用例,可以允许客户端为服务在其中运行指定任意根路径。如果客户端选择此操作,则还需要处理重定向到它们在其域中的其他服务。然而,这对你的应用来说是一个很大的责任。

您可以只是利用他们的注册员,大多数注册人有能力进行路径重定向-这是最简单的方法,需要最少的责任/维护在你的一端。

我还建议有一个选项,用于将所有入口点(即:根域、子域、根domain+path、subdomain+path)重定向到主入口点(即:根域+路径)。

注意:您还可以使用一个服务,比如wwwizer,它可以重定向到如果您的客户端根域上的别名选项不可用时指定的www。

SSL

我建议使用我们加密的ACMEv2 API为您的服务上设置的任何域启用SSL。有可用的,您应该能够。

值得一提的是挑战--它可以通过DNS或HTTP发生。当您决定的库对新证书提出请求时,我们将通过发出请求来响应,以确保您控制域(通过检查DNS记录中的预定唯一散列)或控制它所指向的服务器(通过检查HTTP路径以获得预定的唯一散列)。这意味着您需要确保您的客户端要么在他们的DNS中包含您指定的哈希,要么您公开一个遵循ACME v2挑战响应协议(由您选择的库处理)的路由。

下面是一个示例库,如果您构建的服务是基于python的,它支持上面提到的所有特性,并且还包括一个cli:https://github.com/komuw/sewer

参考文献

https://help.ns1.com/hc/en-us/articles/360017511293-What-is-the-difference-between-CNAME-and-ALIAS-records-

https://letsencrypt.org/docs/client-options/

https://datatracker.ietf.org/doc/html/rfc8555

http://wwwizer.com

票数 2
EN

Stack Overflow用户

发布于 2022-08-02 20:16:40

我想你要问的是如何让客户拥有他们自己的域名,拥有一个指向您网站的子域,并以某种方式提供相应的证书。但从安全的角度来看,海事组织没有安全的办法。以下是我的一些解决办法--你可以这样做:

您管理子域的DNS

您的客户可以为您拥有的公共Route53发行版创建一个NS记录。然后,该子域将有效地属于您,您可以在其子域中创建DNS记录,并在ACM中创建证书,您可以在Cloudfront分发版中使用这些证书。您可以在一个证书中拥有多个FQDN,这样就不必有多个发行版了。您还需要将域添加到发行版中的别名中。

客户端管理自己的DNS,但您告诉他们要做什么。

我不确定这是否有效,因为我还没有尝试过,但是在对ACM证书的DNS验证中,您可以看到您需要创建的记录,您可以告诉客户端他们需要为AWS创建的CNAME记录,以便为给定的域(即sub.client.com )颁发证书,他们还需要创建CNAME以指向您的网站。这样,客户端仍然管理自己的DNS。

进口证书

您可以让您的客户为您创建一个证书,然后您可以导入它。他们还需要创建CNAME记录来指向您的网站。再一次,他们需要创建一个CNAME来指向您的站点。可能最不安全,证书将需要手动旋转。

云锋

您的客户可以使用您的网站作为一个起源在他们自己的Cloudfront发行,有点讨厌,但会工作。我不认为这与不断增长的顾客有关系。

摘要

我不喜欢这些解决方案中的任何一种,它们都很混乱,很可能不符合安全标准,而且很难实现自动化。并不是说你不可能这样做。我建议您为您自己的域创建子域,或者将您自己视为一个托管公司,然后您将代表他们拥有/管理您的客户域,这样就更容易了。但是,在国际海事组织看来,拥有一个域名,然后把控制权交给它,或者转让证书是没有意义的。如果客户需要持有某些证书,或者需要持有这些证书,例如SOC2,您就会遇到麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73126594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文