Я пытаюсь оптимизировать конфигурацию 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.