Перейти к содержанию

Регэксп без якорей

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. Подробнее.