Pull to refresh

Comments 27

Наверное, стоит ещё исключить POST-запросы, заключив всё в условие
if ($request_method = GET ) {

}
Каким образом? У меня вылетает например:
[emerg]: «fastcgi_index» directive is not allowed here in /usr/local/nginx/conf/nginx.conf:182
Эм… location { } внутри server { } быть должен, соблюдается? У меня такое работает точно.
Игорь, location-то внутри server разумеется, а вот куда воткнуть if ($request_method = GET )?
Внутрь location, в него загнать все про кеш, т.е.

if (… ) {
fastcgi_pass_header Cookie;

}
Да вот нифига.
[emerg]: «fastcgi_pass_header» directive is not allowed here in /usr/local/nginx/conf/nginx.conf:186
Есть смысл попробовать через if () отправлять в именованый локейшн я думаю, позже попробую.
Есть, но это тебе полностью пост обрубит, чего я старался избежать
Как вариант — 2 условия, на POST и на GET, соответственно 2 локейшна.
Начиная с 0.7.48, по умолчанию кэшируются только GET и HEAD. Чтобы POST кэшировался нужно добавить
fastcgi_cache_methods GET HEAD POST;
Спасибо!
* Пора учить себя читать changelog'и
* Мне все-таки удасться сегодня поспать! =)
Спасибо!

N.B. Сделайте уже кто-нибудь сайт «Секреты Nginx'а» =)
Зачем сайт? Достаточно тут правильно расставлять теги
UFO just landed and posted this here
Это чтоб скрипт не считал себя умнее сервера и не мешал кешировать как ему нравится
Если не игнорировать эти заголовки, nginx ведёт себя согласно их содержанию.
UFO just landed and posted this here
Извиняюсь, не дописал.

Если в Expires указана дата в будущем, будет отдавать вариант из кеша вплоть до этой даты;
Если в прошлом — будет постоянно запрашивать с FastCGI сервера;

Аналогично и с Cache-Control, см. RFC 2616, section 14
UFO just landed and posted this here
Да, если в кеше есть копия и её срок годности согласно fastcgi_cache_valid не истёк.
Не плохо бы добавить как вообще не кешировать для некоторых юзеров, например залогиненных (можно по кукам определять)
Я такое использовал когда еще не было встроенного кеширования (сам генерировал статику). Как сейчас такое сделать с внутренним кешем даже не смотрел.

    set $django 1;
    set $args_old "";
    if ($is_args = "?") {
        set $args_old ?$args;
    }

    location / {
        if (-f $request_filename/index.html$args_old) {
            set $django 0;
        }
        if ($http_cookie ~* "sessionid=([^;]+)(?:;|$)" ) {
            set $django 1;
        }
        if ($request_method = POST) {
            set $django 1;
        }
        if ($django = 0) {
            rewrite (.*) $1/index.html$args_old break;
        }
        if ($django) {
            fastcgi_pass unix:/www/myserver/server.sock;
            break;
        }
        index       index.html;
        access_log      /var/log/nginx/myserver.log main;
    }
Это очень старый вариант, когда еще кажется не было @backend
Если с последними версиями nginx возникли проблемы с передачей cookies или авторизацией — решение:
fastcgi_pass_header «Set-Cookie»;
вместо
fastcgi_pass_header Cookie;
О, спасибо, я как раз целый день ковырялся, почему никс сессии игнорит — скрипты упорно теряли сессии.
Sign up to leave a comment.

Articles