proxy cache по cookie

n-sw-bit nginx-forum на nginx.us
Вт Июл 13 22:33:43 MSD 2010


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]

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,108387,108387#msg-108387




Подробная информация о списке рассылки nginx-ru