清漆发送坏的“主机”标头到Apache

我正在testingVarnish 3.0.4作为Web服务的新前端的早期阶段。 我已清漆configuration为监听端口88.对于其后端它使用现有的Apache服务器端口80上运行在同一主机上。

我遇到的麻烦是,当清漆发出一个请求到Apache,它包括在Host http头“:88”(即使它肯定连接到端口80上的Apache。

例如:

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

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

我试过了:

  • req.http.header.portberesp.http.header.port更改为80
  • req.http.header.hostberesp.http.header.host更改为www.myservice.com

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

我如何得到清漆发送适当的主机头到Apache?

Varnish默认情况下将Host头部完全不受干扰地发送给Apache。 这是预期的行为 – 除非你告诉它,否则清漆往往不会摆弄任何东西。

为了操作它,除了需要添加的任何条件逻辑外,还要在vcl_recv中join类似这样的内容:

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