Как работает директива try_files?

Рейтинг: 0Ответов: 1Опубликовано: 08.09.2014

У меня тут возникли некоторые разногласия с директивой try_files, прошу просветить. Я думал, что она по очереди перебирает переданные параметры, пока не найдет рабочий, однако в следующем случае это поведение слегка отличается:

location / {
    try_files /web$uri /web$uri/ /app/app_dev.php?$args;
}

location ~ \.php$ {
    # root смотрит в корень symfony-проекта (не в /web!), app_dev.php я перекинул в /app
    set $fsn /app/app_dev.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index app/app_dev.php;
    include fastcgi_params;
    fastcgi_param script_filename $document_root$fsn;
}

(полный конфиг)

Этот хардкод работает при любом запросе, кроме /. При запросе / он напрочь отказывается подцеплять приложение (полный дебаг-лог запроса), и у меня вообще ощущение, что try_files останавливается после первой же неудачи; Location при этом абсолютно точно берется правильный. Отдельный вопрос - что я такого сделал, что в логе появилось recv() not ready (11: Resource temporarily unavailable).

В трекере nginx не нашел ничего похожего по try_files, из чего сделал вывод, что это у меня пули почему-то не ушли. ЧЯДНТ?

Версия nginx - 1.4.6, ОС - виртуалка lubuntu 14.04.1 x64

Ответы

▲ 0Принят

Попробуйте такую замену:

    -index index.html index.htm app_dev.php;
    +index index.html index.htm;

или вообще без index-а, реализовав его через try_files.

Что мешает обновить nginx?