try_files и индексы
Igor Sysoev
is at rambler-co.ru
Mon Jan 19 09:53:44 MSK 2009
On Mon, Jan 19, 2009 at 01:39:05AM +0300, Алексей Бондарь wrote:
> Решил обновится с версии 0.6.34 до 0.7.30 и
> попутно избавится от кучи if'ов в пользу
> try_files. Nginx проксирует apache с passenger (mod_rails).
>
> Получился следующий конфиг:
>
> server {
> listen 80;
> server_name host.ru;
> root /home/user/public;
> access_log /home/user/log/access.log;
> error_log /home/user/log/error.log debug;
> error_page 500 502 503 504 /500.html;
> client_max_body_size 50M;
> log_not_found on;
>
> location / {
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_set_header Host $http_host;
> proxy_max_temp_file_size 0;
>
> try_files /system/maintenance.html
> $uri $uri/index.html $uri.html
> @apache;
> }
>
> location @apache {
> proxy_pass http://127.0.0.1:8080;
> }
> }
>
> И теперь, в случае если клиент заходит
> по адресу http://host.ru/, а в root нет
> индексного файла, он получает 403. То-же
> самое происходит если в root есть
> директория, но в ней так-же нет
> индексного файла (http://host.ru/some/). Что
> несколько ломает файловое кеширование
> в Rails.
>
> В логи при уровне debug пишется следующее:
> 2009/01/18 14:03:16 [error] 16996#0: *413520 directory index of "/home/
> user/public/" is forbidden
>
> Если после try_files добавить условие:
>
> if (!-f $request_filename) {
> proxy_pass http://127.0.0.1:8080;
> break;
> }
>
> Всё работает как надо и запрос в этом
> случае проксируется к бэкэнду.
>
> Так и должно быть? В документации
> сказано что try_files в случае если файл
> найден небыл должен делать редирект на
> последний параметр, по логике это
> должно относится и к индексам.
Прилагаемый патч должен помочь.
--
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c (revision 1766)
+++ src/http/ngx_http_core_module.c (working copy)
@@ -1172,6 +1172,10 @@
continue;
}
+ if (of.is_dir) {
+ continue;
+ }
+
path.len -= root;
path.data += root;
More information about the nginx-ru
mailing list