我正处于测试的早期阶段漆3.0.4 作为 Web 服务的新前端。我已将 varnish 配置为监听端口 88。对于其后端,它使用在同一主机上运行端口 80 的现有 apache 服务器。
我遇到的问题是,当 varnish 向 apache 发出请求时,它会在Host
http 标头中包含“:88”(即使它肯定是通过端口 80 连接到 apache。
例如:
- 我请求
http://www.myservice.com:88/images/foo.gif
。它向后端发出请求。 - Apache 后端将
HOST
标头记录到 Apache 访问日志中 - 使用%{Host}
日志文件格式 - 访问日志显示该主机头为
www.myservice.com:88
,而不是www.myservice.com
。
如果我使用 telnet 连接到这个 apache 服务器并发出相同的 HEAD 请求但改变标头的值Host
,我会看到与通过 varnish 看到的相同行为 - 即如果我在主机标头中包含 :88,请求将返回 404。
我试过了:
- 改变
req.http.header.port
并beresp.http.header.port
80
- 改变
req.http.header.host
并。beresp.http.header.host
www.myservice.com
似乎我忽略了一些明显的东西。
我如何让 varnish 向 apache 发送正确的主机头?
答案1
Varnish 默认Host
完全不干扰标头 - 它会将发送给 Apache 的内容发送给它。这是预期行为 - Varnish 不会干扰任何内容,除非您要求它这样做。
vcl_recv
要对其进行操作,除了需要添加的任何条件逻辑之外,还要将类似的内容放入您的中:
set req.http.Host = "www.myservice.com";