nginx/0.7.65
Используется в качестве кеширующего прокси перед Apache c mod_php.
При наличии пользовательской куки работает апач, при её отсутствии - отдаётся кеш.
Проблема в том, что nginx периодически кладёт в кеш странички, отдаваемые [u]зарегистрированным[/u] пользователям.
Т.е. впервые зашедший на сайт человек видит надпись "Привет, username" на [b]одной/нескольких[/b] из страниц сайта.
Как можно заставить nginx кешировать для гостей только те страницы, которые и должны отдаваться гостям?
Заранее спасибо за ответ.
Основной учаток конфига:
[code]proxy_cache_path /tmp/nginx-cache levels=1:2 keys_zone=one:20m inactive=7d max_size=1024m;
proxy_temp_path /tmp/nginx-temp;
location / {
#здесь мы фильтруем наших залогиненых пользователей
if ($cookie_BITRIX_SM_AUTH) { return 412; }
if ($cookie_BITRIX_SM_UIDH) { return 412; }
#submit различных форм
if ($request_method != GET) { return 412; }
#некешируемые GET запросы
if ($request_uri ~ set_city) { return 412; }
if ($request_uri ~ personal/order/make/) { return 412; }
if ($request_uri ~ 1c_exchange/) { return 412; }
if ($request_uri ~ action=BUY) { return 412; }
#хак для тестов
if ($request_uri ~ lm_nocache) { return 412; }
#return 412;
proxy_cache one;
proxy_pass http://127.0.0.1:81;
proxy_redirect default;
proxy_ignore_headers "Cache-Control" "Expires"; # Игнорируем заголовки, относящиеся к кешированию, полученные от Apache-сервера
proxy_hide_header "Set-Cookie";
proxy_pass_header Cookie;
proxy_cache_key $cookie_BITRIX_SM_city|$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri;
proxy_cache_valid 200 301 302 304 10m;
proxy_cache_valid 503 5s;
proxy_cache_valid any 5s;
proxy_cache_use_stale http_502 http_503 http_504;
expires 1m;
add_header Cache-Control public;
}
location @backend {
proxy_pass http://127.0.0.1:81;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
error_page 404 = /404.php;
}
error_page 412 = @backend;
[/code]