ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Изменить заголовок(и) set- cookie после получения отве та от backend'а


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Изменить заголовок(и) set- cookie после получения отве та от backend'а
  • From: "roga_i_kopita" <nginx-forum@xxxxxxxx>
  • Date: Tue, 23 Nov 2010 05:52:03 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Sender:From:References:In-Reply-To:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=l3vbkheeBVYhLspJdaGsE1cEU6Y+HjOI733MKmibZcA=; b=I4ikyosP9e6H6G233NxcTaLu3ESQQOg4iIST33qXmx0KRk44EQKcZvnqAm04uQws5mG4oWASHlIZpxOrmKrFK08+hrkJOKstjQgb4Cb+QDKF2i9phSGrsk916wGYvOhn;
  • In-reply-to: <201003082159.42682.vugluskr@xxxxxxxxxxxxxxx>
  • References: <201003082159.42682.vugluskr@xxxxxxxxxxxxxxx>

Здравствуйте, уважаемые
автоматизаторы и веб-мастера!

Пока что не касаюсь вопроса
кеширования - это будет следующим
этапом.
Бьюсь с сессией и ПОЧТИ её ПОБЕДИЛ. Но,
как всегда, есть "нюанс".
Читал много статей, где умные головы
советуют не бороться с сессией.
Однако, меня мучает вопрос по отдаче
статики без куков, но в тоже время без
редиректов на другой домен и без потери
функциональности от полного отказа от
session_start().
[quote="Если сессия нужна всегда - тогда
стартуйте ее всегда и НЕ боритесь с
сессионной кукой. Если сессия не нужна
всегда - не стартуйте ее всегда
и, опять же НЕ боритесь с сессионной
кукой."]
Такой вариант не канает - сессия в
рамках одного и того же сайта где-то
нужна, а где-то нет.
[/quote]
NGINX 0.7.64, FastCGI, eAccelerstor, memcached, JOOMLA 1.5.22.

В общем сделал так:

Предварительно в php.ini директиву
session.cookie_path установил с пустым
значением (было / ). Т.е. куки ставятся
для того пути (каталога), который был
запрошен, а не сплошняком на весь сайт.

[code]
server {
        server_name www.domain.travel;
        root /var/www/sites/domain.travel;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        fastcgi_hide_header "Set-Cookie";
        valid_referers none blocked server_names *.domain.travel;

        location / {
                try_files $uri @not_found;
        }

        location /administrator {
                index index.php;
                error_page 403 =404;
                try_files $uri/ @not_found;
                fastcgi_pass_header "Set-Cookie";
                location ~* /administrator/index2?\.php$ {
                        include /etc/nginx/fastcgi_default;
                }
                location ~* \.(css|js|gif|ico|jpg|png)$ {
                        rewrite ^
$scheme://static.simba.travel$request_uri permanent;
                }
                location ~* \.php$ {
                        error_page 404 = @not_found;
                        return 404;
                }
        }

        location ~* \.php$ {
                try_files $uri @not_found;
                include /etc/nginx/fastcgi_default;
        }

        location ~*
\.(css|js|gif|jpg|jpeg|png|ico|eot|svg|otf|ttf|woff|pdf|doc|xls)$ {
                if ($invalid_referer) {return 404;}
                expires 1d;
                add_header Cache-Control public;
        }

        location @not_found {
                include /etc/nginx/fastcgi_default;
                fastcgi_param SCRIPT_FILENAME $document_root/index.php;
                fastcgi_param SCRIPT_NAME /index.php;
        }
}

server {
        server_name static.domain.travel;
        root /var/www/sites/domain.travel;

        access_log off;
        log_not_found off;

        fastcgi_hide_header "Set-Cookie";

        location / {return 404;}

        location ~* \.(css|js|gif|ico|jpg|png)$ {
                expires max;
                add_header Cache-Control public;
        }
}
[/code]

Иными словами: заголовки с куками прячу
для всего сайта, но выдаю куки для пути
/administrator.
Чтобы можно было залогиниться и
работать в админке сайта.
При навигации по статьям на морде сайта
куков нет - отслеживаю через firebug и
встроенные инструменты разработчика в
Chrome.
Запросы статики по пути ~*
/administrator/.*\.(css|js|gif|ico|jpg|png)$ перенаправляю
в другой server, где куки выключены.
Обработку любых .php, кроме index.php и index2.php
в админке запрещаю, а также
просматривать структуру каталогов в
адресной строке тоже запрещаю - все нах,
на главную! Планирую для этого location
включить SSL.
В остальных location всё стандартно. Куки
вырублены.

Так вот, [b]нюанс в том[/b], что всё это
прекрасно работает, до той поры, пока не
появляется необходимость с морды сайта
через форму методом POST отправить
сообщение.
[b]Куки нужны, а КАК их включить ТОЛЬКО
для этой формы (путь /booking.html) - не могу
придумать.[/b]

[code]

бла-бла-бла






[/code]

Идеи такие:
1. Куки на уровне server НЕ отключать. В
каждом location, где это нужно, подключать
перловый модуль и парсить заголовки
запросов клиентов и ответов FastCGI. Т.е.
там, где не нужно ставить fastcgi_hide_header
"Set-Cookie". А там, где куки нужны этим
модулем вручную менять path на нужное
значение путём использования
$r->header_in(строка), $r->header_out(строка,
значение).
Буду благодарен, если знающие люди
подскажут, как конкретно это сделать, у
самого опыта и знаний для написания
этого кода не хватает.
В моём случае для этого дополнительно
надо пересобрать nginx с поддержкой
ngx_http_perl_module и ngx_http_ssi_module.

2. Куки на уровне server отключить. В нужных
местах их генерить самостоятельно
непосредственно в location. Только опять же
не знаю, как в конфиг server воткнуть код php
для генерации куки. Да и по-моему это
бредовая идея. Если не ошибаюсь, куки
обрабатывает php, а не nginx. Nginx их просто
передаёт в заголовках.
Соответственно на месте php я бы сильно
удивился, если бы при первом запросе
сгенерил куку и передал бы её nginx'у для
клиента. А nginx при следующем запросе от
клиента попытался бы мне подсунуть
совершенно другую "отсебятину", не
соответствующую тому, что я передал ему
для клиента в ответе на самый первый
запрос. Если не прав, прошу меня
поправить.

Прошу поделиться опытом, как сие дело
успешно разрешить.

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


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.