<div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div>День добрый.</div><div><br></div><div>Задача: отдавать ответ из кеша для всех запросов без определенной куки (sessionid), т.е. чтобы неавторизованные пользователи не стучались к апачу (точнее стучались реже, раз в 10 минут).</div>
<div><br></div><div>Использую следующий конфиг:</div><div><br></div><div>log_format cache "Code: $status Session: $cookie_sessionid Cache: $upstream_cache_status Response time: $upstream_response_time Uri: $uri";</div>
<div>proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m max_size=1000m;</div><div><br></div><div>server {</div><div> include includes/listen.conf;</div><div> server_name domain;</div><div> client_max_body_size 100m;</div>
<div> location / {</div><div> access_log /var/log/nginx/domain.ru.access.log cache;</div><div> error_log /var/log/nginx/domain.ru.error.log debug;</div><div> proxy_ignore_headers Expires Cache-Control;</div><div> proxy_cache_bypass $cookie_sessionid;</div>
<div> proxy_no_cache $cookie_sessionid;</div><div> proxy_cache cache;</div><div> proxy_cache_lock on;</div><div> proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;</div><div>
proxy_cache_valid 200 10m;</div><div> proxy_cache_methods GET HEAD;</div><div> proxy_pass <a href="http://127.0.0.1" target="_blank">http://127.0.0.1</a>;</div><div> proxy_set_header Host $host;</div><div> proxy_set_header X-Real-IP $remote_addr;</div>
<div> proxy_set_header X-Forwarded-For $remote_addr;</div><div> }</div><div>}</div><div><br></div><div>Далее посылаю шесть запросов, три без куки sessionid, три с кукой, в логе вижу следующее:</div><div><br></div><div>root@test:/etc/nginx/sites-enabled# tail -f /var/log/nginx/domain.ru.access.log</div>
<div>Code: 200 Session: - Cache: MISS Response time: 0.007 Uri: /</div><div>Code: 200 Session: - Cache: MISS Response time: 0.007 Uri: /</div><div>Code: 200 Session: - Cache: MISS Response time: 0.006 Uri: /</div><div>Code: 200 Session: f889bfe0e2577b848418f512fd7e8df5 Cache: BYPASS Response time: 0.008 Uri: /</div>
<div>Code: 200 Session: f889bfe0e2577b848418f512fd7e8df5 Cache: BYPASS Response time: 0.009 Uri: /</div><div>Code: 200 Session: f889bfe0e2577b848418f512fd7e8df5 Cache: BYPASS Response time: 0.010 Uri: /</div><div><br></div>
<div>все шесть запросов ушли к апачу, хотя я ожидал, что из первых трех уйдет только первый (чтобы сформировать содержимое кеша), а последующие два к апачу уходить не будут.</div><div><br></div><div>подскажите пожалуйста, что я делаю не так и как мне решить мою задачу?</div>
<div><br></div><div>спасибо.</div><div><br></div><div>p.s.</div><div><br></div><div>root@test:/etc/nginx/sites-enabled# nginx -V</div><div>nginx version: nginx/1.2.1</div><div>TLS SNI support enabled</div><div>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</div>
<div><br></div><div>p.s. в логе переменная $cookie_sessionid в случае отсутствия куки sesionid почему-то помещает не пустую строку, а символ "-", я сначала подумал что дело в это (согласно документации директив proxy_cache_bypass и proxy_no_cache для того чтобы ответ взялся из кеша указанная переменная должна содержать пустую строку (или 0), поэтому я добавил map {} блок, который превращал "-" в ""), но это ничего не изменило, поэтому я предполагаю что проблема в чем-то ином.</div>
<div><br></div><div><br></div>-- <br>С уважением, Шарипов Руслан.<br><br>
</div>
</div><br>
</div>