Hello! On Sun, Sep 03, 2017 at 09:37:24AM -0400, Seriyyy95 wrote:
> Недавно обновил версию Nginx и столкнулся с проблемой, что перестали > работать регулярные выражения в location вида: > > location ~ строка {} > > Хотя если просто написать location = /строка {} то это срабатывает, но нужно > именно регулярное выражение, чтобы искалась не именно эта строка, любая URL, > которая содержит нужную подстроку. Например, хочу заблокировать доступ к > всем файлам AI-BOLIT на сервере, для этого делаю: > > location ~ ^/(AI-BOLIT|AIBOLIT|ai-bolit) { > deny all; > } > > Но эффекта 0, url без проблем открываются, хотя на > http://nginx.viraptor.info/ показано что этот запрос должен работать. > Дистрибутив CentOS 7, программу брал из Brouken repo. Вот вывод nginx -v: [...] > В чем может быть причина и что делать? Наиболее частая причина подобных проблем с регулярными выражениями - в том, что они выполняются последовательно, и используется первое совпадение. Так, если у вас в начале конфига виртуального сервера есть запись вида "location ~ / { ... }", то никакие другие регулярные выражения работать не будут, ибо первое совпадение случится именно у этого location'а, и именно он будет использован для обработки запроса. Чтобы такого не было - нужно чётко следить за тем, какие location'ы, заданные регулярными выражениями, используются в блоке server{}. А лучше - по возможности не использовать их, а использовать обычные префиксные location'ы, где поведение гораздо более интуитивно и легче поддаётся контролю администратором. Подробнее об этой и других проблемах поддержки больших конфигураций можно узнать из доклада Игоря "Масштабируемая конфигурация nginx". Видео доклада и его расшифровка есть тут: https://habrahabr.ru/company/oleg-bunin/blog/313666/ -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru