如何在 Nginx 中允许特定 IP 访问 URL(不是目录!)

如何在 Nginx 中允许特定 IP 访问 URL(不是目录!)

我试图拒绝访问在 Nginx 上运行的网站上的特定 URL,但允许来自特定 IP 的访问,我一直在尝试使用位置来摆弄,但似乎只是试图找到一个合适的目录而不是 URL。

这是我想出的办法,但是只返回 404。

location /specificurl {
       root /var/www/site1.com/current;
       allow 123.123.123.123;
       deny all;
       }

答案1

您想为所有 IP 返回 404 错误,但指定了哪个 IP?使用带有“=404”参数的指令“error_page”。有点...

location /specificurl {
   root /var/www/site1.com/current;
   allow 123.123.123.123;
   deny all;

   error_page 403 =404 /404.html;

}

http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page

此外,还可以将响应代码更改为另一个, 例如:

error_page 404 =200 /empty.gif;

或者类似...

location /specificurl {
   root /var/www/site1.com/current;
   allow 123.123.123.123;
   deny all;

   error_page 403 = @goaway;

}

location @goaway {
    return 444;
}

答案2

我自己设法解决了这个问题,方法如下:

    set $deny_access off;

    if ($remote_addr !~ (123.123.123)) {
            set $deny_access on;
    }
    if ($uri ~ "^/(specificurl)$" ) {
            set $deny_access on$deny_access;
    }
    if ($deny_access = onon) {
            return 444;
    }

答案3

在位置块和以下行中,

try_files $uri $uri/ /index.php?q=$uri&$args;

所以它会像

location /index.php/admin {
   try_files $uri $uri/ /index.php?q=$uri&$args;
   allow 123.123.13.124;
   deny all;
{

对我来说,这个方法有效。对你来说,也许也有效。

相关内容