Re: бага или фича?
Maxim Dounin
mdounin на mdounin.ru
Пт Сен 24 19:53:00 MSD 2010
Hello!
On Fri, Sep 24, 2010 at 09:59:50AM -0400, Dmitry Veselov wrote:
> Интересный момент, что если вместо
>
> location ~* \.(css|flv|gif|html|jpg|js|png|swf|xml)$ {
>
> поставить
>
> location / {
>
> То есть, кэширование всего сразу, то
> отваливаются индексные файлы index.html, и
> nginx выдает ошибку 403 при любой линке
> типа http://www.bla-bla.com/link/ даже если ему
> прописать в конфигурации директиву index
> index.html
> [b]Притом происходит это не сразу, а
> через несколько минут – возможно когда
> устаревает кэш.[/b]
proxy_store - это не кеш, а способ локального сохранения файлов.
И про индексы ничего не знает. И если файл с указанным именем
сохранить невозможно - он его просто не сохранит.
При этом proxy_store on; - задаёт простой маппинг в файловую
систему с учётом root/alias.
В результате:
- Первый запрос к /link/ не найдёт каталога /path/to/root/link и
вернёт 404. После чего пойдёт к бекенду и пытается сохранить
файл /path/to/root/link/, и по очевидным причинам у него это не
получится. В error_log'е должно быть про это. Вообще, читать
error_log - полезно.
- Любой запрос к файлу в /link/blah создаст каталог
/path/to/root/link, и в нём файл blah.
- Любой последующий запрос к /link/ найдёт каталог
/path/to/root/link, и будет пытаться искать в нём индексный
файл, не найдёт, убедится что autoindex выключен и вернёт 403
(есть каталог, но смотреть индекс прав нет).
Вариантов решения приблизительно два:
1. Написать proxy_store с использованием переменных, и где явно
указать что запросы заканчивающиеся на '/' нужно сохранять в
нужный вам индексный файл. При этом не забыть ещё и добавить
обработку 403 - потому что ситуацию, когда запросят сначала
/link/blah, а уже потом /link/ - никто не отменял.
2. Не использовать инструмент который вы не понимаете, а
использовать proxy_cache. Он гораздо более предназначен для
задач кеширования.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru