Http
無法使用 Varnish 5 刪除伺服器 HTTP 標頭
我有以下
vcl_deliver
子程序:sub vcl_deliver { # Remove some HTTP-headers: unset resp.http.Server; unset resp.http.X-Varnish; unset resp.http.Via; unset resp.http.X-Cacheable; unset resp.http.Age; return (deliver); }
現在奇怪的是,除了標頭之外的所有其他 HTTP 標頭都被刪除了
Server
(我已經curl
使用 Google Chrome 進行了檢查)。當我使用 調試時varnishlog -g raw
,我得到以下資訊:202443 RespProtocol c HTTP/1.1 202443 RespStatus c 200 202443 RespReason c OK 202443 RespHeader c Server: nginx 202443 RespHeader c Content-Type: text/html; charset=UTF-8 202443 RespHeader c Vary: Accept-Encoding 202443 RespHeader c Cache-Control: no-cache, private 202443 RespHeader c Date: Sun, 12 Aug 2018 14:19:11 GMT 202443 RespHeader c X-Frame-Options: SAMEORIGIN 202443 RespHeader c X-XSS-Protection: 1; mode=block 202443 RespHeader c X-Content-Type-Options: nosniff 202443 RespHeader c Content-Encoding: gzip 202443 RespHeader c X-Varnish: 202443 168601 202443 RespHeader c Age: 69910 202443 RespHeader c Via: 1.1 varnish (Varnish/5.0) 202443 VCL_call c DELIVER [7/171] 202443 RespUnset c Server: nginx 202443 RespUnset c X-Varnish: 202443 168601 202443 RespUnset c Via: 1.1 varnish (Varnish/5.0) 202443 RespUnset c Age: 69910 202443 VCL_return c deliver 202443 Timestamp c Process: 1534153462.090447 0.000147 0.000147 202443 RespUnset c Content-Encoding: gzip 202443 RespHeader c Accept-Ranges: bytes 202443 Debug c "RES_MODE 40" 202443 RespHeader c Connection: close 202443 Gzip c U D - 0 0 0 0 0 202443 Timestamp c Resp: 1534153462.090535 0.000235 0.000088 202443 ReqAcct c 229 0 229 302 0 302 202443 End c 202442 SessClose c REQ_CLOSE 0.000 202442 End c
正如我們所見 (
RespUnset Server: nginx
) Varnish 正在嘗試刪除 HTTPServer
標頭 - 但是為什麼當我使用curl
Google Chrome 或 Google Chrome 進行調試時它仍然出現?
您必須使用 Varnish 和 nginx“三明治”來終止 SSL:
nginx (SSL) -> 清漆 -> nginx
所以很自然,
Server
在 Varnish 中刪除標頭後,nginx (SSL) 仍然會發送自己的標頭。解決方案是同時刪除 nginx 中的 Server 標頭,例如使用 headers-more nginx 模組:
more_clear_headers Server;