Во-первых: у меня нет большого опыта работы с Nginx.
Я просто перейду непосредственно к проблеме:
Конфигурация Nginx:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
}
http {
proxy_cache_path /var/nginx_cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=10g;
upstream server {
server -removed-;
}
server {
listen 80;
server_name -removed-;
location / {
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_http_version 1.1;
gzip_min_length 500;
gzip_vary on;
gzip_proxied any;
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy
text/js
text/xml
text/javascript;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache STATIC;
proxy_set_header Host $host;
----> proxy_ignore_headers Vary; <-----
proxy_cache_key $host$uri$is_args$args;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_pass -removed-;
}
}
}
Когда строка 'proxy_ignore_headers Vary;' установлен, все будет кешировано, включая HTML-страницы. Когда я удаляю эту строку, все кэшируется, ЗА ИСКЛЮЧЕНИЕМ HTML-страниц. Почему это?
Я бы хотел, чтобы Nginx кэшировал HTML-страницы, даже когда Vary-заголовки отправляются исходным сервером.
Я надеюсь, что кто-то может мне помочь :).
Заголовки ответа:
Варьируются: Хост, Content-Language, Content-Type, Content-Encoding
Исправлена:
В исходном коде Nginx установлено не более 42 символов, используемых заголовками Vary. В моем случае там 51 символ, поэтому мои заголовки Vary обрабатываются как Vary: * (no-cache). Установка максимума на 84 исправила это для меня.
Эта статья объясняет это более подробно.
https://www.thedotproduct.org/posts/nginx-vary-header-handling.html
Благодарим парня, разместившего эту короткую статью.