Varnish 向 Apache 发送错误的“Host”标头

Varnish 向 Apache 发送错误的“Host”标头

我正处于测试的早期阶段3.0.4 作为 Web 服务的新前端。我已将 varnish 配置为监听端口 88。对于其后端,它使用在同一主机上运行端口 80 的现有 apache 服务器。

我遇到的问题是,当 varnish 向 apache 发出请求时,它会在Hosthttp 标头中包含“:88”(即使它肯定是通过端口 80 连接到 apache。

例如:

  1. 我请求http://www.myservice.com:88/images/foo.gif。它向后端发出请求。
  2. Apache 后端将HOST标头记录到 Apache 访问日志中 - 使用%{Host}日志文件格式
  3. 访问日志显示该主机头为www.myservice.com:88,而不是www.myservice.com

如果我使用 telnet 连接到这个 apache 服务器并发出相同的 HEAD 请求但改变标头的值Host,我会看到与通过 varnish 看到的相同行为 - 即如果我在主机标头中包含 :88,请求将返回 404。

我试过了:

  • 改变req.http.header.portberesp.http.header.port80
  • 改变req.http.header.host并。beresp.http.header.hostwww.myservice.com

似乎我忽略了一些明显的东西。

我如何让 varnish 向 apache 发送正确的主机头?

答案1

Varnish 默认Host完全不干扰标头 - 它会将发送给 Apache 的内容发送给它。这是预期行为 - Varnish 不会干扰任何内容,除非您要求它这样做。

vcl_recv要对其进行操作,除了需要添加的任何条件逻辑之外,还要将类似的内容放入您的中:

set req.http.Host = "www.myservice.com";

相关内容