Не работает map c переменными $status и $upstream status
YuriV
nginx-forum на forum.nginx.org
Вт Авг 2 17:08:13 UTC 2016
Доброго времени суток.
Возникла тут задачка кэшировать на nginx ТОЛЬКО 200-е ответы от апстрима, но
при условии, что поддерживаются заголовки кэширования от бэкэнда. И тут
упёрся в неразрешимую проблему - ни на одной версии nginx, начиная с 1.8.0 и
кончая 1.10.1, на которую только что обновился не работает вот эта
простейшая мапа:
map $upstream_status $do_cache {
200 "0";
default "no-cache";
}
Сам конфиг выглядит примерно так:
upstream test {
server 192.168.1.1;
}
proxy_cache_path /var/cache/nginx/test_cache levels=1:2
keys_zone=test_cache:2048m max_size=35000m inactive=3d;
server
{
listen 80;
server_name testapp;
proxy_cache test_cache;
proxy_cache_valid 200 3d;
proxy_cache_valid 301 5s;
proxy_cache_valid 302 1s;
proxy_cache_valid 500 1s;
proxy_cache_use_stale error timeout invalid_header updating;
#proxy_ignore_headers Expires Cache-Control Set-Cookie;
#proxy_hide_header Set-Cookie;
proxy_hide_header Pragma;
proxy_hide_header X-Powered-By;
proxy_hide_header X-AspNetMvc-Version;
proxy_headers_hash_max_size 2048;
proxy_headers_hash_bucket_size 1024;
proxy_http_version 1.1;
proxy_connect_timeout 10;
proxy_send_timeout 180;
proxy_read_timeout 60;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_cache_key "$host$request_uri$http_origin";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
access_log /var/log/nginx/test.log cust;
location / {
proxy_cache_bypass $do_cache;
proxy_set_header Host testapp;
proxy_pass http://test;
}
}
Сделал вывод в кустомный лог переменной $do_cache - независимо от статуса,
который приходит с апстрима, она всегда равна дефолту мапы...
10.2.14.219 - - [02/Aug/2016:12:45:52 -0400] "GET /WebForm1.aspx?code=200
HTTP/1.1" 200 594 "-" "no-cache"
10.2.14.219 - - [02/Aug/2016:12:45:52 -0400] "GET /WebForm1.aspx?code=200
HTTP/1.1" 200 585 "-" "no-cache"
10.2.14.219 - - [02/Aug/2016:12:45:52 -0400] "GET /WebForm1.aspx?code=200
HTTP/1.1" 200 591 "-" "no-cache"
10.2.14.219 - - [02/Aug/2016:12:45:56 -0400] "GET /WebForm1.aspx?code=500
HTTP/1.1" 500 674 "-" "no-cache"
10.2.14.219 - - [02/Aug/2016:12:45:58 -0400] "GET /WebForm1.aspx?code=500
HTTP/1.1" 500 674 "-" "no-cache"
10.2.14.219 - - [02/Aug/2016:12:45:58 -0400] "GET /WebForm1.aspx?code=500
HTTP/1.1" 500 674 "-" "no-cache"
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,268695,268695#msg-268695
Подробная информация о списке рассылки nginx-ru