Назад | Перейти на главную страницу

Nginx, проверить метод запроса без использования IF?

Я пытаюсь оптимизировать конфигурацию Nginx, но столкнулся с проблемой, которую не знаю, как исправить. У меня есть папка /images на моем сервере, с которого я доставляю различные статические файлы для веб-сайта. Однако та же папка также используется для загрузки файлов через WebDAV.

Следовательно, я должен проверять каждый запрос, существует ли статический файл И если метод запроса GET, Доставляю файл. В противном случае я предполагаю, что запрос был связан с WebDAV (например, PUT и т. Д.). См. Этот образец:

if ($uri ~* ^/images)         { set $getimages "${getimages}A"; }
if ($request_method = GET)    { set $getimages "${getimages}B"; }
if ($getimages = "AB") {
    rewrite ^ $uri$args last;
}

Этот пример выше работает нормально. Но мне было интересно, есть ли другой способ сделать это без использования IF. Учитывая Ссылка IfIsEvil в Nginx Wiki

Есть идеи?

Повторно опубликовать комментарий из Pothi как CW

If не является злой, если используется вне location блок! Даже внутри location блок, его можно использовать с return и rewrite директивы!

Фрагмент со страницы IfIsEvil

Директива if имеет проблемы при использовании в location контекст, в некоторых случаях он не делает то, что вы ожидаете, а вместо этого делает что-то совершенно другое. В некоторых случаях это даже segfaults. Обычно рекомендуется избегать этого, если возможно.

Единственные 100% безопасные вещи, которые можно делать внутри, если location контекст:

return ...;
rewrite ... last;

Все остальное может вызвать непредсказуемое поведение, в том числе потенциальное SIGSEGV.