根据我的访问日志,我有一个网站,每当用户加载网站的管理页面时,都会点击“GET /admin/ HTTP/1.1”。我想将一些 IP 列入白名单以访问此页面,因此我添加了以下规则:
location /admin/ {
allow $whitelistIP;
deny all;
}
当第三方访问时,这似乎可以正确返回 403,但当特权方访问时,将返回 404 页面。如果我完全禁用此节,则将返回访问权限,并且所有各方都可以再次加载管理站点。因此,我想知道为什么特权方会返回 404,而此节所做的只是允许 IP...
答案1
编辑:这个答案很可能是错误的。
如果您/admin/
通常通过 FastCGI 提供 PHP,那么问题在于您上面显示的位置块覆盖了 PHP 脚本的默认位置块。
在 nginx 中,位置块不是链接的,最精确的位置块用于请求。使用正则表达式的位置(如location ~ \.php$
)的优先级低于您上面指定的更具体的位置块。
另一个问题点可能是此位置块覆盖了通用 URL 重写块。