Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Запросы проходят мимо кеша
- To: nginx-ru@xxxxxxxxx
- Subject: Запросы проходят мимо кеша
- From: "Serafim" <nginx-forum@xxxxxxxx>
- Date: Fri, 18 Jan 2013 10:50:40 -0500
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tigger.jlkhosting.com; s=x; h=Date:Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=qfWqoyPXIOMPgaUoL4RDS753aa2CaPCh3DHrXuVgzNI=; b=X9DcxvPDW4/Qg/NF08uSfw7i+JgffSSsqCoTSxzXIv8qbD5KGvszpFTsCsODm39ZWP48VnqHPpxH8LRypMv6PGieb9A7g6bCnarhvDEKtwVsnGD+JShQdno1P/3OfPjn;
Добрый день.
Задача: отдавать ответ из кеша для всех запросов без определенной куки
(sessionid).
Используются следующих конфиг:
log_format cache "Code: $status Cache key: $cache Cache:
$upstream_cache_status Response time: $upstream_response_time Uri: $uri";
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mainForNonAuth:10m
inactive=10m max_size=1000m;
map $cookie_sessionid $cache {
default "noncache";
"" "";
"-" "";
}
server {
include includes/listen.conf;
server_name domain.ru;
client_max_body_size 100m;
location / {
access_log /var/log/nginx/test.school.lo.ufanet.ru.access.log cache;
error_log /var/log/nginx/test.school.lo.ufanet.ru.error.log debug;
### CACHE::begin
proxy_cache_bypass $cache;
proxy_no_cache $cache;
proxy_cache mainForNonAuth;
proxy_cache_use_stale updating;
proxy_cache_valid 200 10m;
proxy_cache_methods GET HEAD;
### CACHE::end
proxy_pass http://127.0.0.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Далее выполняем запросы (без куки session), в логах видим следующее:
root@test:/etc/nginx/sites-enabled# tail -f
/var/log/nginx/test.school.lo.ufanet.ru.access.log
Code: 200 Cache key: Cache: MISS Response time: 0.953 Uri: /
Code: 200 Cache key: Cache: MISS Response time: 0.009 Uri: /
Code: 200 Cache key: Cache: MISS Response time: 0.007 Uri: /
Code: 200 Cache key: Cache: MISS Response time: 0.008 Uri: /
т.е. как видим в логе значение переменной $cache равно пустой строке, из
документации следует, что в данному случае (согласно работе директив
proxy_cache_bypass и proxy_no_cache) ответ должен браться из кеша, но тем
нее менее запрос уходит на бэк-енд и ответ береться из него.
если же отправить запросы содержащие куку sessionid, но в логе видим
следующее:
Code: 302 Cache key: Cache: - Response time: 1.434 Uri: /journal/try-login
Code: 301 Cache key: noncache Cache: BYPASS Response time: 0.003 Uri: /
Code: 200 Cache key: noncache Cache: BYPASS Response time: 0.709 Uri: /
Code: 200 Cache key: noncache Cache: BYPASS Response time: 0.013 Uri: /
302 редирект как я полагаю по умолчанию не кешируется вообще, поэтому статус
кеша равен "-", а вот остальные запросы работают правильно, т.е. срабатывает
правило BYPASS.
поясню причины использования конструкции map {}, в документации к
proxy_cache_bypass и proxy_no_cache сказано, что ответ берется из кеша
только в том случае, если переменная указанная в данных директивах равно
пустой строке (или нулю), но использовать переменную $cookie_sessionid
нелья, т.к. nginx (по непонятным для меня причинам) случае отсутствия куки
возвращает не пустую строку, а символ "-".
пожалуйста подскажите что я делаю не так, и как можно решить мою задачу.
спасибо.
p.s.
nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug
--with-http_addition_module --with-http_dav_module --with-http_geoip_module
--with-http_gzip_static_module --with-http_image_filter_module
--with-http_realip_module --with-http_stub_status_module
--with-http_ssl_module --with-http_sub_module --with-http_xslt_module
--with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl
--with-mail --with-mail_ssl_module
--add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-auth-pam
--add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-echo
--add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-upstream-fair
--add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-dav-ext-module
Posted at Nginx Forum:
http://forum.nginx.org/read.php?21,235256,235256#msg-235256
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|