Регэксп без якорей¶
Gixy Check ID: unanchored_regex
В NGINX при использовании регулярного выражения в location рекомендуется ставить якоря хотя бы на начало или конец строки. Иначе шаблон будет совпадать с любой частью пути, что ведёт к неожиданностям и просадке производительности.
Например, следующий блок совпадёт с любым URL, содержащим /v1/:
location ~ /v1/ {
# ...
}
Совпадёт:
/v1//v1/foo/foo/v1/bar/foo/v1/
Чтобы совпадение было только с путями, начинающимися с /v1/, добавьте якорь:
location ~ ^/v1/ {
# ...
}
Для расширений файлов (например, PHP) якорь нужен на конец строки.
Неверно:
location ~ \.php {
# ...
}
Это совпадёт с любым URL, содержащим .php: /foo.php, /foo.phpanything — что неверно.
Верно:
location ~ \.php$ {
# ...
}
Так совпадают только пути, оканчивающиеся на .php.
Укрепляйте NGINX с поддерживаемыми RPM
Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.