try_files и индексы
Алексей Бондарь
alexey.bondar at gmail.com
Mon Jan 19 01:39:05 MSK 2009
Доброй ночи,
Решил обновится с версии 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 в случае если файл
найден небыл должен делать редирект на
последний параметр, по логике это
должно относится и к индексам.
Спасибо.
More information about the nginx-ru
mailing list