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