清漆向 Apache 发送错误的“主机”标头

Dou*_*ris 1 varnish apache-2.2

我正处于将Varnish 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标头的值,我会看到我通过清漆看到的相同行为 - 即如果我在主机标头中包含 :88,请求返回 404。

我试过了:

  • 改变req.http.header.portberesp.http.header.port80
  • 改变req.http.header.hostberesp.http.header.hostwww.myservice.com

好像我错过了一些明显的东西。

如何让清漆向 apache 发送正确的主机标头?

Sha*_*den 7

Host默认情况下,Varnish 使标头完全不受干扰 - 它会将发送给它的内容发送给 Apache。这是预期的行为 - 除非你告诉它,否则 Varnish 不会摆弄任何东西。

要操作它,vcl_recv除了需要添加的任何条件逻辑之外,还可以在您的.

set req.http.Host = "www.myservice.com";
Run Code Online (Sandbox Code Playgroud)