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