ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: try_files и индексы



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
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;
 


 




Copyright © Lexa Software, 1996-2009.