nginx白名单配置不生效

nginx 1.20.1
在定义deny all 后之前定义的白名单就不生效了

配置如下
server {
listen 81;
listen [::]:81;

    location = /tb {
    proxy_pass  https://www.baidu.com/;
    allow 124.126.180.122;
    #allow 127.0.0.1;
    deny all;
    }
}

ChatGPT尝试为您解答,仅供参考
在 deny all 后面定义的 allow 指令将不会生效。这是因为 deny all 会拒绝所有的访问,包括白名单中的地址。

要让白名单生效,需要将 deny all 放在 allow 指令的后面。例如:

server {
    listen 81;
    listen [::]:81;
    location = /tb {
        proxy_pass  https://www.baidu.com/;
        allow 124.126.180.122;
        #allow 127.0.0.1;
        deny all;
    }
}

这样,在指定的白名单中的地址将可以访问,其他地址将被拒绝访问。

在 nginx 中,如果在一个块中定义了 deny all,那么这个块中的所有规则都将被忽略。这意味着如果在这个块中定义的白名单之前定义了 deny all,那么白名单将不会生效。
可以把白名单放在 deny all 之前,或者将它们放在另一个块中。例如:

location / {
    allow 1.2.3.4;
    deny all;
}

or

location / {
    deny all;
}

location / {
    allow 1.2.3.4;
}

在 Nginx 配置文件中,如果在定义了 deny all 后,再定义白名单规则,那么白名单规则将不会生效。这是因为,在 Nginx 中,规则是按照顺序执行的,如果定义了 deny all 规则,那么所有的请求都将被拒绝,无论之前是否定义了白名单规则。

所以,如果你想要使用白名单规则,那么应该将 deny all 规则放在白名单规则的后面。

例如,你可以这样定义规则:

server {
    listen 81;
    listen [::]:81;

    allow 1.2.3.4;
    allow 5.6.7.8;
    deny all;
}

这样,只有 1.2.3.4 和 5.6.7.8 两个 IP 地址的请求会被接受,其他所有的请求都会被拒绝。

希望这对你有帮助,望采纳。