我遇到的情况与大多数人的情况有些不同。这肯定与我以前遇到过的任何情况都不同:
我正在为一位客户建立一个网站,这位客户希望/需要保留对其规范域的完全控制权。他们不想简单地将www.theirdomain.com
和theirdomain.com
指向我的服务器 IP,而是希望将流量路由到他们,并让他们的 Big-IP 设备将该流量发送给我们client.mydomain.com
。我不知道 Big-IP,但我怀疑/假设这是一个重写,用户只会看到theirdomain.com
。
此外,客户有 2 个子域,它们的登录页面将由我的应用提供,他们的 IS 团队不想与它们有任何关系。他们只是更新这些域的 DNS 以指向我的服务器。不过,登录页面由 提供client.mydomain.com/path/to/landing/page
。
因为我们不希望最终用户看到client.mydomain.com
,所以我通常对应答 URL 进行 301 重定向,但这似乎会产生一些不必要的流量:
- 我的服务器回答请求
sub.theirdomain.com
- 我的服务器并没有直接回答请求,而是重定向到
www.theirdomain.com/path/to/landing/page
- 他们的 Big-IP 将他们直接发送回我的服务器(他们刚刚离开的服务器),但使用正确的域名。
- 我的服务器呈现内容。
www.theirdomain.com
在第 2 步中,我是否可以简单地重写 URL并直接提供内容,而不是重定向到他们的设备?也欢迎更好的想法。正如我所说,这不是我以前遇到过的事情,我正在寻找选择。
答案1
我们有几个客户设置了它,这样他们就可以控制自己的 DNS,因为其中一些客户只有指向我们的子域。我们使用 nginx 作为负载平衡器,它还可以处理重定向,并且我们在默认 vhost 文件 (00default) 中有重定向。没有什么太复杂的,它对我们来说非常有效:
if ($host ~* "^ourdomain.com$") {
rewrite ^(.*)$ http://www.ourdomain.com$1 permanent;
}
if ($host ~* "^subdomain.otherdomain.com$") {
rewrite ^(.*)$ https://ourdomain.com$1 permanent;
}
if ($uri !~* (/option/.*|/simple/.*|/embed/.*|/mini/.*|/someOtherOption\.action.*|/otherOption\.action.*|/file/[0-9a-zA-Z]+/html5.*|/file/[0-9a-zA-Z]+/html5mobile.*|/thumbnail/.*) ) {
set $cname_match "N";
}
if ($host !~* "(.*\.)?ourdomain\.com|videos\.yetanotherdomain\.com") {
set $cname_match "${cname_match}N";
}
if ($cname_match = "NN") { rewrite ^.*$ http://www.ourdomain.com/; }
if ($uri !~* (/thumbnail_.*|/vcomments/.*|/onethmb.gif$|/crossdomain.xml$|/otherthmb[0-9]+.gif$)) {
set $thumb_redirect "Y";
}
if ($host ~* "^(cdn-)?thumbs\.ourdomain\.com") {
set $thumb_redirect "${thumb_redirect}Y";
}
if ($thumb_redirect = "YY") { rewrite ^.*$ http://www.ourdomain.com/ permanent; }
location / {
proxy_pass http://ourdomain_apache_pool;
error_page 404 @fallback404;
error_page 403 @fallback403;
}
# redirects
location /learn-more {
rewrite /learn-more/? http://www.ourdomain.com/features permanent;
}
# help
location ~* ^/help/zendesk/*.*$ {
proxy_pass http://ourdomain_ruby_pool;
}
location ~* ^/help/*.* {
rewrite ^/(.*) http://support.ourdomain.com permanent;
}
在我看来,您可以采用上述重写规则之一,例如:
if ($host ~* "^subdomain.otherdomain.com$") {
rewrite ^(.*)$ https://ourdomain.com$1 permanent;
}
让他们将 DNS 指向您服务器上的域,然后根据您的需要重写它。