Re: проблема с кэшированием

Igor Sysoev igor на sysoev.ru
Пн Июн 7 17:01:18 MSD 2010


On Mon, Jun 07, 2010 at 03:06:54PM +0300, Alex Smorodin wrote:

> Добрый день.  ubuntu с ядром 2.6.27-11-generic,nginx version: nginx/0.7.65.
> Хочу настроить кэширование в  nginx.  На апач пропускаю  все post запросы,
> так же проверяю  куку session, она устанавливаетcя, когда пользователь
> логинится, соответственно эти страницы мы не кэшруем.  Проблема в следующем:
> в кэш иногда попадают внутренние страницы сайта, если не устанавливать
> параметр "proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;".
> Если его добавить, все работает нормально.  Непонятно, как он может влиять?
> Для проверки добавил в ключ proxy_cache_key куку session,  так вот  кука
> попадает в кэш (хотя явно прописано условие не кэшировать страницу).
> Вот конфиг:
> server {
>         listen 192.168.0.32:9081;
>         server_name domain.com;
>         access_log /var/log/nginx/domain.com/nginx-access.log combined;
>         error_log  /var/log/nginx/domain.com/nginx-error.log error;
>         proxy_temp_path /var/cache/nginx/domain.com;
>         location @nocached {
>                 proxy_pass http://192.168.0.32:81;<http://192.168.0.32:81/;>
>                 proxy_set_header Host domain.com;
>                 proxy_set_header X-Real-IP $remote_addr;
>                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>        }
>         location / {
>                 proxy_pass http://192.168.0.32:81;<http://192.168.0.32:81/;>
>                 proxy_set_header Host  domain.com;
>                 proxy_set_header  X-Real-IP  $remote_addr;
>                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>                 proxy_next_upstream error timeout invalid_header http_500
> http_503;
>                if ($cookie_session) {
>                         return 412;
>                }
>                if ($request_method = POST ) {
>                         return 412;
>                }
>                 error_page 412 = @nocached;
>                 proxy_cache one;
>                 proxy_cache_key
> "$request_method|$is_args|$host|$request_uri|$cookie_session";
>                 proxy_hide_header "Set-Cookie";
>                 proxy_ignore_headers "Cache-Control" "Expires";
>                 proxy_cache_valid 200 301 302 304 1h;
>        }
> }

Возьмите 0.8.40 и используйте такую конфигурацию:

 server {
     listen 192.168.0.32:9081;
     server_name domain.com;
     access_log /var/log/nginx/domain.com/nginx-access.log combined;
     error_log  /var/log/nginx/domain.com/nginx-error.log error;
     proxy_temp_path /var/cache/nginx/domain.com;

     location / {
         proxy_pass http://192.168.0.32:81;
         proxy_set_header  Host  domain.com;
         proxy_set_header  X-Real-IP  $remote_addr;
         proxy_next_upstream error timeout invalid_header http_500 http_503;
         proxy_cache     one;
         proxy_no_cache  $cookie_session;
         proxy_cache_key domain.com$uri?$args;
         proxy_hide_header "Set-Cookie";
         proxy_ignore_headers "Cache-Control" "Expires";
         proxy_cache_valid 200 301 302 304 1h;
     }
 }


-- 
Игорь Сысоев
http://sysoev.ru



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