【问题标题】:perl catalyst www to non www redirectperl 催化剂 www 到非 www 重定向
【发布时间】:2013-05-20 08:03:56
【问题描述】:

我有一个托管多个客户网站的托管平台。这是一个Catalyst 应用程序负载平衡在nginx 后面。我希望每个客户都能够选择是否要让他们的域在其前面有www 或在其前面没有www,然后我希望能够适当地重定向。我的问题是,最好是在nginx 级别还是在Catalyst 级别处理这样的事情?通常一个简单的wwwnon-www 重定向将在负载均衡器级别处理,但我认为由于我重定向的方式会因域而异,因此在Catalyst 处理重定向可能更有意义等级?如果是这样,在Catalyst 中处理从wwwnon-www(或反之亦然)的重定向的最佳方法是什么?或者,如果您认为nginx 会更好,那么使用它来处理这个问题的最佳方法是什么?谢谢!

【问题讨论】:

  • 我们在这里讨论多少个域?每个域都有一个虚拟主机吗?
  • @innaM 现在有 100 个域。而且还会有更多。每个都没有虚拟主机,我试图避免这种情况,所以我可以将域指向 nginx 服务器并让它工作,而不必每次都弄乱配置。目前我有一个服务器块将所有域传递到 Catalyst 应用程序服务器。您认为最好的方法是为每个域设置一个服务器块吗?那将是大量的复制和粘贴!
  • 我并没有考虑复制和粘贴,而是考虑了自动化过程。毕竟,你是一个 perl 程序员 :-) 但我很难说这是否适合你的情况。
  • @innaM,那是真的 :) 我可以用 perl 自动化它,我想我只是不喜欢每次添加新域时都必须重新启动 nginx 的事实系统,所以配置文件可以生效,但也许这并不像我想象的那么重要。也许这是最好的选择。

标签: perl redirect nginx catalyst no-www


【解决方案1】:

您可以使用客户的 DNS 执行此操作 例如,如果您将 www.domain.com 设为 domain.com 的 CNAME 别名,并使用 nginx 将 www.domain.com 重写为 domain.com。我认为这将是最简单的方法。它会以某种方式混淆 Catalyst 吗?

另请注意,以这种方式使用 CNAME 别名意味着您必须小心可能用于 HTTPS 的 SSL 证书。

【讨论】:

  • 但是如果我用 nginx 将 www.domain.com 重写为 domain.com,如果我有 20 个不同的域进入 nginx,我怎么知道要重写哪些域?例如,domaina.com 需要重定向到 www.domaina.com,domainb.com 需要重定向到 www.domainb.com。也许我误解了您的解决方案,但是我不必为每个唯一域手动将其放入 nginx 的配置文件中吗?
  • 由于这将发生在 DNS 级别,因此不会有任何重写本身。 Catalyst 在请求中是否需要一个规范域?我也使用反向代理,这样可以将我与您看到的问题隔离开来。
【解决方案2】:

像 nginx 这样的 Web 服务器非常适合进行简单的 URL 重定向。使用 nginx,您可以像这样进行重定向:

server {
        listen       0.0.0.0:80;
        server_name  *.mydomain.com;

        rewrite ^(.*) http://mydomain$1 permanent;
}

【讨论】:

  • 我希望能够从 www 重定向到非 www,反之亦然。您在这里所拥有的意味着我必须为我想要支持的每个域定义一个服务器配置。一旦我有足够数量的域要支持,每次都必须添加这个指令会变得非常混乱。
猜你喜欢
  • 2011-04-12
  • 2012-06-03
  • 2018-06-06
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多