跳转至

未加锚点的正则

Gixy Check ID: unanchored_regex

在 NGINX 中,使用正则定义 location 时,建议至少对字符串开头或结尾加锚点。 否则,该正则会匹配字符串的任意部分,可能导致意外行为或性能下降。

例如,以下 location 会匹配任何包含 /v1/ 的 URL:

location ~ /v1/ {
    # ...
}

它会匹配:

  • /v1/
  • /v1/foo
  • /foo/v1/bar
  • /foo/v1/

若只希望匹配以 /v1/ 开头的 URL,应加上锚点:

location ~ ^/v1/ {
    # ...
}

这样,正则仅匹配以 /v1/ 开头的 URL。

匹配文件扩展名(如 PHP 文件)时,正则应锚定到字符串结尾。

错误示例:

location ~ \.php {
    # ...
}

它会匹配任何包含 .php 的 URL:/foo.php/foo.phpanything,这是不正确的。

正确示例:

location ~ \.php$ {
    # ...
}

这样才能只匹配以 .php 结尾的 URL。

加固 NGINX,使用维护的 RPM

使用 GetPageSpeed 提供的 NGINX Extras 在 RHEL/CentOS/Alma/Rocky 上获取持续更新的 NGINX 与模块。 了解更多.