nginx location= 不适用于正则表达式

nginx location= 不适用于正则表达式

这是我的配置。有人能告诉我它有什么问题吗?

auth_basic 不起作用

location = /bitrix/admin/(fileman_admin.php|perfmon_sql_list.php|webdebug_image_profiles.php) {
     satisfy  any; # allow access if authorization is successful

     auth_basic              "admin site";
     auth_basic_user_file    /var/www/my.server/htdocs/mysite/.htpasswd;
}

但同时这有效:

location = /bitrix/admin/fileman_admin.php {..}

拒绝访问的最佳方法是什么

site.com/bitrix/admin/fileman_admin.php
site.com/bitrix/admin/perfmon_sql_list.php
site.com/bitrix/admin/webdebug_image_profiles.php

答案1

  • (无):如果没有修饰符,则位置将被解释为前缀匹配。这意味着给定的位置将与请求 URI 的开头进行匹配以确定匹配。
  • =:如果使用等号,则当请求 URI 与给定的位置完全匹配时,该块将被视为匹配。
  • ~:如果存在波浪号修饰符,则该位置将被解释为区分大小写的正则表达式匹配。
  • ~*:如果使用波浪号和星号修饰符,则位置块将被解释为不区分大小写的正则表达式匹配。
  • ^~:如果存在插入符号和波浪号修饰符,并且如果该块被选为最佳非正则表达式匹配,则不会进行正则表达式匹配。

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

您必须使用波浪号(~)符号来设置正则表达式路径:

location ~ ^/bitrix/admin/(fileman_admin.php|perfmon_sql_list.php)$ {
...
}

相关内容