【问题标题】:Redirect domain to another domain in Meteor将域重定向到 Meteor 中的另一个域
【发布时间】:2014-10-15 12:17:10
【问题描述】:

我有两个域名,一个我已经使用了很长时间(blainehansenpianostudio.com),另一个是我现在正在使用的简化域名(blainehansenpiano.com)。我使用 Digital Ocean 进行托管,并且我的 DNS 已设置为两个域都指向我的 droplet,并且都正确显示在我的站点中。

然而,我希望 blainehansenpianostudio.com(更长,更烦人的)完全重定向到 blainehansenpiano.com,但目前它只是作为别名,显示相同的站点但也保留其烦人的长网址。

我能够挖掘出的关于 http 重定向的唯一信息是 this meteorpedia article 和这个 stackoverflow question。这些似乎都没有考虑到辅助域的存在,并且正在使用应用内路由系统。这似乎不是正确的解决方案,因为重定向甚至应该在发送捆绑包之前发生,对吗?我不希望在我的应用中发生大量无关的重定向。

另外,SO 问题有这一行:

实现这一点的最简单方法是将重定向放在中间件中:

这对我来说没有任何意义。 “中间件”在哪里?

我该如何实现呢?我觉得我需要更改服务器设置中的某些内容,但我使用 Meteor Up 进行部署,它没有提及任何关于重定向的内容,并且不确定我需要的服务器配置在哪里。

提前致谢!

更新

我尝试将以下代码放入我的lib/router.js 文件中,只是为了测试一下,看看路由器是否是有问题的“中间件”:

WebApp.connectHandlers
    .use(function(req, res, next) {
        console.log(req);
        console.log(res);
        console.log(next);
        next();
    });

但绝对不是。它只是破坏了路由器。

可能的(但混乱的)解决方案

将此客户端重定向代码放入main.js

if (window.location.href.indexOf("blainehansenpianostudio") > -1) {
    window.location = "http://blainehansenpiano.com";
}

有效,但在重定向完成后它似乎滞后了一会儿。在我看来,这会触发两个完全独立的服务器请求,这根本不理想。

【问题讨论】:

  • 如何设置别名?您可以在该地址设置一个简单的页面来重定向using something like these
  • 访问这两个链接,您会看到它们都显示相同的实际站点,但它们保留了各自的网址。这就是我所说的“别名”。也许我没有以适当的方式使用这个词。
  • 为了回应使用该维基百科文章中的一种技术,我想我是在问如何在我的特定设置中这样做。 Meteor 几乎完全为您处理服务器端,并且在“blainehansenpianostudio.com”上创建一个刚刚重定向的页面可能需要我使用 Digital Ocean 设置另一个 droplet,这会很浪费。
  • 我更具体地问的是,您使用什么代码或服务器设置来为其设置别名。我猜这是数字海洋中的一个设置,在这种情况下,可能还有一个重定向选项。使用别名设置,您的应用程序将确定它来自哪个域并将其重定向,最好将别名更改为它自己的重定向页面或更改该域的服务器设置。
  • 是的,它是 Digital Ocean 中的一个设置,在他们的 DNS 部分中。不幸的是,他们告诉我他们不支持该级别的重定向,我必须在我的服务器设置中这样做。我希望我能更好地了解我的服务器设置! Meteor Up 为我处理了所有细节!

标签: redirect dns meteor


【解决方案1】:

对于流星应用程序,您可以使用 javascript 进行条件重定向。下面是一个例子:

<script type="text/javascript">
<!--
function Redirect() {
    if(window.location.href.indexOf("blainehansenpianostudio") > -1){
       window.location="http://blainehansenpiano.com";
    }
}
//-->
</script>

您是否在前面使用任何其他反向代理,例如 Apache 或 Ngnix?如果是这样,可以有更好的方法来实现这一点。

如果您为服务器端重定向安装 Ngnix(这是一种更简洁的方式),那么您可能会包含一个新的服务器块来执行重定向。下面是一个例子:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name blainehansenpianostudio.com;
        return 301 $scheme://blainehansenpiano.com$request_uri;
}

在您的情况下,您可能会选择将 $scheme 硬编码为 http。 $request_uri 部分确保原始请求 URI 包含在重定向响应中。

要设置 nginx,我还建议使用@Steffo 提供的链接

【讨论】:

  • 回答你关于 apache 或 nginx 的问题,看看我最近的编辑。
  • 虽然这会起作用(如果没有其他问题,这就是我最终会采用的方法),但在服务器级别使用某些东西似乎更干净。
【解决方案2】:

我在meteor 应用程序前面使用nginx(也用于终止SSL - 我看到您在网站上有一个sign-in 按钮,因此您可能需要SSL)并且它也在DO 上运行。使用单个 nginx 实例来接受两个域的请求并将它们反向代理到单个流星实例。我不会在流星应用程序中使用重定向,因为这很容易干扰 SSL 设置

server {
    listen       443 ssl;
    server_name  www.blainehansenpiano.com;
    ssl_certificate    /etc/ssl/blainehansenpiano.crt
    (... SSL stuff )
    location / {
        proxy_pass http://meteor_localhost-OR-remotehost:3000;
        (... some web socket setting ...)
    }
 }

还有更长的名称指向同一个流星实例

server {
        listen       443 ssl;
        server_name  www.blainehansenpianostudio.com;
        ssl_certificate    /etc/ssl/blainehansenpianostudio.crt
        (... SSL stuff )
        location / {
            proxy_pass http://meteor_localhost-OR-remotehost:3000;
            (... some web socket setting ...)
        }
     }

【讨论】:

  • 好吧,这似乎是一个很好的解决方案,所以你能告诉我有关设置 nginx 的任何资源吗?
  • 我更喜欢利用当前流星设置的解决方案。
  • Meteor 是为在 nginx 之类的东西后面运行而构建的。由于您使用的是 DO,因此您可能希望以 digitalocean.com/community/tutorials/… 开头
  • 是的,我还建议使用@Steffo 提供的 loink 设置 Nginx。
猜你喜欢
  • 1970-01-01
  • 2014-03-07
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2012-10-21
  • 1970-01-01
  • 2023-02-14
相关资源
最近更新 更多