如何为用户启用自定义域?

HWD*_*HWD 5 dns domain-mapping domain-masking

我希望允许我的用户使用自己的域名来访问我的网络服务.

例如,如果我的用户在example.com/users/david上有个人资料,我怎样才能让david使用exampledavid.com来访问他的个人资料页面.

我不希望用户在地址栏中看到example.com,而是让david看到exampledavid.com.

Dra*_*ag0 6

我看到了不错的答案,但这里没有人提供全貌。

如果您的客户只是 CNAME 到您的域或为您的 IP 创建 A 记录,而您不处理这些自定义域的 TLS 终止,则您的应用程序将不支持 HTTPS,如果没有它,您的应用程序将无法在现代浏览器中运行这些自定义域。

您需要在您的网络服务器前设置一个 TLS 终止反向代理。该代理可以在单独的机器上运行,但您可以在与网络服务器相同的机器上运行它。

CNAME 与 A 记录

如果您的客户希望在他们的子域中使用您的应用程序,例如,app.customer.com他们可以创建一个app.customer.com指向您的代理的 CNAME 。

如果他们想让你的应用程序在他们的根域上,例如,customer.com那么他们必须创建一个customer.com指向你代理 IP的 A 记录。确保这个 IP 永远不会改变!

如何处理TLS终止?

要使 TLS 终止工作,您必须为这些自定义域颁发 TLS 证书。为此,您可以使用 Let's Encrypt。您的代理将看到Host传入请求的标头,例如app.customer1.comcustomer2.com等,然后它会通过检查 SNI 来决定使用哪个 TLS 证书。

代理可以设置为自动为这些自定义域颁发和更新证书。在来自新自定义域的第一个请求时,代理将看到它没有适当的证书。它会要求让我们加密一个新证书。Let's Encrypt 将首先发出质询以查看您是否管理该域,并且由于客户已经创建了指向您的代理的 CNAME 或 A 记录,这告诉 Let's Encrypt 您确实在管理该域,并且它会让您为它。

要自动颁发和更新证书,我建议使用 Caddyserver、greenlock.js、OpenResty (Nginx)。

tl;dr 关于这里发生的事情;Caddyserver 侦听 443 和 80,它自动接收请求、颁发和更新证书,将流量代理到您的后端。

如何在我的后端处理它

您的代理正在终止 TLS 并将请求代理到您的后端。但是,您的后端不知道请求背后的原始客户是谁。这就是为什么您需要告诉您的代理在代理请求中包含其他标头以识别客户的原因。只需添加X-Serve-For: app.customer.comX-Serve-For: customer2.com或任何Host原始请求的标头即可。

现在,当您在后端收到代理请求时,您可以阅读此自定义标头,并且您知道请求背后的客户是谁。您可以基于此实现您的逻辑,显示属于该客户的数据等。

更多的

将负载均衡器放置在您的代理队列之前,以获得更高的可用性。您还必须对证书和 Let's Encrypt 挑战使用分布式存储。如果出现故障,请使用 AWS ECS 或 EBS 进行自动恢复,否则,您可能会在半夜醒来手动重启机器或代理。

如果你需要更多细节,你可以在 Twitter @dragocrnjac私信


Mic*_*l B 5

您可以通过告诉您的客户配置 CNAME 以指向您的域来轻松启用此功能。

因此,如果您的服务器位于 www.example.com,您可以告诉“david”将 www.exampledavid.com 配置为拥有指向 www.example.com 的 CNAME 记录

在服务器端,您将有一个配置来检测正在请求和重定向的域,并向“david”提供适当的内容

如果您的客户想要在您的服务器上使用裸域(即 exampledavid.com),您需要向他们提供 IP 地址,但是在执行此操作之前,您需要确保您的 IP 地址不会更改,并且可能与供应商签订了合同以确保这一点。


Pus*_*jee 5

您的问题可以通过 URL 重写和 HTTP 标头操作或反向代理来解决。

  • 对于 apache http 服务器:使用ProxyPassReverse指令

指令 ProxyPassReverse 允许 Apache 调整 HTTP 重定向响应的 Location 标头中的 URL。例如,当 Apache 用作反向代理时,这一点至关重要,以避免由于位于反向代理后面的后端服务器上的 HTTP 重定向而绕过反向代理。

假设本地服务器地址为http://wibble.org/;然后

ProxyPass /mirror/foo/ http://foo.com/
ProxyPassReverse /mirror/foo/ http://foo.com/

不仅会导致对 http://wibble.org/mirror/foo/bar的本地请求在内部转换为对http://foo.com/bar 的代理请求(ProxyPass 在这里提供的功能)。它还负责服务器 foo.com 发送的重定向:当http://foo.com/bar被他重定向到 http://foo.com/quux时,Apache 会将其调整为 http://wibble.org/mirror /foo/quux在将 HTTP 重定向响应转发到客户端之前。

  • 对于 MS(R) IIS,使用重写模块:

轻松替换 Web 应用程序 URL 以生成用户和搜索引擎友好的结果。URL 重写允许 Web 管理员轻松地将响应 HTML 中 Web 应用程序生成的 URL 替换为对用户更友好且搜索引擎更友好的等效 URL。可以在反向代理后面的 Web 应用程序生成的 HTML 标记中修改链接。URL 重写通过与 HTTP 请求和响应标头以及 IIS 服务器变量配合使用的出站重写规则,使出站响应内容和标头重写变得更加容易。

此外,您必须确保 exampledavid(dot)com 设置为 DNS 提供商以传递所有请求传递到 example.com。

DNS 记录示例:

NAME                    TYPE   VALUE
--------------------------------------------------
exampleXYZ.com.         CNAME  example.com.
example.com.            A      192.0.2.23
Run Code Online (Sandbox Code Playgroud)

参考:

  1. https://en.wikipedia.org/wiki/CNAME_record

  2. http://www.akadia.com/services/apache_redirect.html

  3. http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

  4. http://www.iis.net/downloads/microsoft/url-rewrite