nginx (with fastcgi_cache), логирование и аякс

milov

Новичок
Добрый день.
1) Подскажите как отключить кеширование nginx (with fastcgi_cache) на поддомене и на страницах сессии (авторизация).
Пробую так, не работает:
set $no_cache 0;
if ($http_host ~* "adminsubdomein"){set $no_cache 1;}

location ~ \.(php)$ {
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_valid 200 304 5m;
}

2) На страницах не срабатывает отправка формы через ajax.

При выключенном кешировании всё работает.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Сделать для субдомена отдельный блок server {}, а для страниц авторизации - отдельный location.

Дублирующиеся строки конфигурации можно вынести в отдельные файлы через include.

If лучше не использовать вообще никогда (за исключением комбинации if + return).
 

MiksIr

miksir@home:~$
Вот кстати, я тут пол часа думал, как мне проверить наличие файла в разных директориях (совсем разных, далеко за рутом) и выдать первый встречный. root /home ну очень нехотелось... и ничего, кроме if, получается.
 

milov

Новичок
Сделать для субдомена отдельный блок server {}, а для страниц авторизации - отдельный location.
совсем не кошерно. уверен можно через переменные.
А в закешированной странице почему форма не уходит аякосом? вообще не реагирует как будто нет js кода.
 

MiksIr

miksir@home:~$
совсем не кошерно. уверен можно через переменные.
Не знаю насчет кошерности, думаю, что однозначно. Но идею @fixxxer дал верную. От if-ов избавляйтесь.

А в закешированной странице почему форма не уходит аякосом? вообще не реагирует как будто нет js кода.
Телепатов нет. Берут и смотрят - какие http запросы куда уходят, куда не приходят. Эта информация в комплекте с полным nginx конфигм - может дать ответ.
 

Redjik

Джедай-мастер
Вот кстати, я тут пол часа думал, как мне проверить наличие файла в разных директориях (совсем разных, далеко за рутом) и выдать первый встречный. root /home ну очень нехотелось... и ничего, кроме if, получается.
эм, а try_files? или я проблему не понял?

ЗЫ. по поводу if, fixxxer прав, был один проект, где было около 50-100 if в конфиге, nginx порой уходил покурить
 

MiksIr

miksir@home:~$
а try_files? или я проблему не понял?
Он работает внутри root. Т.е. если у меня root /home/vasya, то никак наличие в /home/petya/ через try_files не сделать.
Пока сделал if (-f /home/petya$uri) { rewrite ^.+$ /petya/$uri last; } и уже локейшн с /petya/ c нужным мне рутом.
Хотя, сейчас думаю, может root /home + try_files может и лучше было бы...
 

fixxxer

К.О.
Партнер клуба
PHP:
root /home/vasya;
location / {
    try_files $uri /petya$uri @notFound;
}
location /petya/ {
     root /home;
}
location @notFound {
     fastcgi_pass ...;
}
Не? Или так не работает?
 
Последнее редактирование:

MiksIr

miksir@home:~$
@fixxxer, вот на это и потратил пол часа ;) не, не работает, в try_files - физические пути, а не локейшены, увы. Ну кроме последнего параметра.
 

fixxxer

К.О.
Партнер клуба
Да, действительно.

Но не вижу никаких проблем и с чем-то типа
PHP:
location / {
    root /;
    try /home/vasya$uri /home/petya$uri /opt/www$uri ...
}
Главное - $uri, а не $request_uri :)
 

MiksIr

miksir@home:~$
Ну да, наверно так и сделаю в следующих раз. Сначала чем-то очень не нравился root /. Хотя, как я понимаю, if + rewrite .. last в общем рабочий вариант тоже, без подводных камней.
 

fixxxer

К.О.
Партнер клуба
Если нужны именно локейшены (мало ли, конфигурации хитрые), можно еще сделать через error_page 404.

В rewrite для "всего" достаточно указать в качестве регулярки ^, зачем лишний матчинг?
 

MiksIr

miksir@home:~$
В rewrite для "всего" достаточно указать в качестве регулярки ^, зачем лишний матчинг?
Ну так rewrite не только матчит, но и переписывает uri.... а, если rewrite ^ /petya last - то да... ну у меня там немного более сложная замена была, кажется...
 

milov

Новичок
не кошерно для меня, потому что если нужно для конкретной страницы отключить или для определённого IP адреса, то через if проще сделать. у меня вышло всего 2 if (на поддомен и на IP)
Ещё вопрос возник:
как принудительно обновить кеш? например изменил контент или стиль у ссылок (страниц более 2млн.)
на примере если можно 1 страницы и всех страниц.
пробую через заголовки, не получается т.е. "X-Update: 1"

и ещё 1 вопрос )))
как сделать чтоб кеш писался для каждого сайта в свою папку, fastcgi_cache_path стоит в секции http, в секции server ругается )
спасибо.
 

MiksIr

miksir@home:~$
Если нужны именно локейшены (мало ли, конфигурации хитрые), можно еще сделать через error_page 404.

В rewrite для "всего" достаточно указать в качестве регулярки ^, зачем лишний матчинг?
Вот скажи, что сделает rewrite ([^/])$ $1/ permanent; c урлом /abc/def ?
 
Сверху