【问题标题】:domain.com to www.domain.com rewrite in Varnishdomain.com 到 www.domain.com 用 Varnish 重写
【发布时间】:2013-11-15 01:32:58
【问题描述】:

我需要使用清漆将domain.com 重写为www.domain.com。我已经为 Nginx 做到了。但不知道如何使用清漆。

让我解释一下我为什么要这样做,如果我的方法是错误的,请纠正我。 每当我使用domain.com 访问该站点时,我都有一个路径为.domain.com 的cookie。每当我使用www.domain.com 访问路径时,它都会创建一个路径为.www.domain.com 的新cookie 现在,同一用户的这两个 cookie 正在创建会话问题。

我希望如果我的服务器只接收像 www.domain.com 这样的请求,那么将没有与 domain.com 关联的 cookie 范围

所以理想情况下,问题是,重写是一种好方法吗?如果是,那么如何用 varnish 做到这一点,我已经尝试过使用 Nginx 但没有运气。

非常感谢任何指导。谢谢大家。

【问题讨论】:

  • 如果你的 Nginx 发送 HTTP 重定向 Varnish 应该没有问题地中继它们,所以这应该可以正常工作,而不需要对 Varnish 做任何特殊的事情。相反会发生什么?您是否在配置中重新定义了vcl_hash?测试前你清除缓存了吗?
  • 关于 cookie:您始终可以在保存 cookie 时将 cookie 域显式设置为 .domain.com,这在将其设置为 www.domain.com 时也会起作用。
  • @LudwikTrammer 这正是我所做的。我必须明确地将req.http.host 设置为www.domain.com 谢谢
  • 如果您正在重播我评论的第二部分 - 我的意思是在设置 cookie 时 - 在 PHP、Django、Rails、Node 或任何您用作后端的东西中。您可以将 cookie 域显式设置为 .domain.com,即使您是从 www.domain.com 设置它 - 这将为您提供跨子域的一致 cookie,根本不需要重定向。
  • @LudwikTrammer 当然我明白了。但是 varnish VCL 中存在一些错误。这是别人写的。它操纵cookie。理想情况下,varnish 不应该修改 cookie。我不得不在 VCL 中硬编码主机名。

标签: nginx rewrite varnish varnish-vcl


【解决方案1】:

回答“重写”部分(请参阅 cmets,因为这可能更容易),您有 2 个选项:

  1. 执行客户端重定向(恕我直言)[a]
  2. 在内部重写主机 [b]

另见:

[a]

sub vcl_recv {
  // ...
  if ( req.http.host == "domain.com" ) {
    error 750 "http://www." + req.http.host + req.url;
  }
  // ...
}

sub vcl_error {
  // ...
  if (obj.status == 750) {
    set obj.http.Location = obj.response;
    # Set HTTP 301 for permanent redirect
    set obj.status = 301;
    return(deliver);
  }
  // ...
}

[b]

sub vcl_recv {
  // ...
  if ( req.http.host == "domain.com" ) {
    set req.http.host = "http://www." + req.http.host;
  }
  // ...
}

【讨论】:

  • 谢谢。我必须明确地将req.http.host 设置为www.domain.com 此外,我正在寻找重写,因为在清漆中没有直接的重定向机制。
猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2012-09-23
  • 2016-07-14
  • 2012-05-30
  • 2014-04-17
相关资源
最近更新 更多