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

时间:2016-01-29 19:14:19

标签: dns domain-mapping domain-masking

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

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

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

3 个答案:

答案 0 :(得分:2)

我看到了不错的答案,但是这里没有人给出完整的图片。

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

您需要在Web服务器之前设置TLS终止反向代理。该代理可以在单独的计算机上运行,​​但是您可以在与Web服务器相同的计算机上运行它。

CNAME与A记录

如果您的客户希望将您的应用发布到其子域中,例如app.customer.com他们可以创建一个指向您的代理的CNAME app.customer.com

如果他们想将您的应用放在其根域中,例如customer.com,那么他们将不得不在customer.com上创建一个指向您的代理IP的A记录。确保此IP永远不会更改!

如何处理TLS终止?

要使TLS终止有效,您必须为这些自定义域颁发TLS证书。您可以使用“让我们加密”。您的代理将看到传入请求的Host标头,例如app.customer1.comcustomer2.com等,然后它将通过检查SNI决定使用哪个TLS证书。

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

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

tl; dr了解此处发生的情况; Caddyserver侦听443和80,它会自动接收请求,问题并更新证书,从而将流量代理到您的后端。

如何在后端处理它

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

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

更多

在您的代理服务器前面放置一个负载平衡器,以提高可用性。您还必须将分布式存储用于证书和“让我们加密”挑战。如果出现故障,请使用AWS ECS或EBS进行自动恢复,否则,您可能会在半夜醒来,重新启动计算机,或者手动启动代理。

如果您需要更多详细信息,可以在Twitter @dragocrnjac上向我发送DM

答案 1 :(得分:1)

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

因此,如果您的服务器位于www.example.com,请告诉大卫'配置www.exampledavid.com以获得指向www.example.com的CNAME记录

在服务器端,您将拥有一个配置,该配置检测到正在请求和重定向的域,并将相应的内容提供给大卫'

如果您的客户想要将裸域(例如exampledavid.com)用于您的服务器,您需要为他们提供IP地址,但在此之前您需要确保您的IP地址不是要改变,并且可能与提供它的人签订合同以确保这一点。

答案 2 :(得分:0)

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

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

指令ProxyPassReverse允许Apache调整URL中的URL   HTTP重定向响应上的位置标头。例如,这是   当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重定向之前http://wibble.org/mirror/foo/quux   回应客户。

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

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

另外,您必须确保使用DNS提供程序设置exampledavid(dot)com,以便将所有请求传递给example.com。

DNS记录示例:

NAME                    TYPE   VALUE
--------------------------------------------------
exampleXYZ.com.         CNAME  example.com.
example.com.            A      192.0.2.23

价:

  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