Невозможно удалить HTTP-заголовок сервера с помощью Varnish 5

У меня есть следующая подпрограмма 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 пытается удалить HTTP Заголовок сервера - но почему он все еще появляется при отладке с помощью curl или Google Chrome?

1
задан 13 August 2018 в 13:15
1 ответ

Вы должны использовать Varnish с nginx «сэндвич» для завершения SSL:

nginx (SSL) -> Varnish -> nginx

Естественно, после удаления Server в Varnish, nginx (SSL) по-прежнему отправляет собственный заголовок.

Решение состоит в том, чтобы удалить также заголовок сервера в nginx , например с использованием модуля nginx headers-more:

more_clear_headers Server;
2
ответ дан 3 December 2019 в 20:12

Теги

Похожие вопросы