如何在不传递列表的情况下设置一系列远程IP地址?

时间:2017-09-29 15:32:51

标签: nginx

我有这个服务器块:

server {
    server_name doamin.tld;

    set $maintenance on;
    if ($remote_addr ~ (127.0.0.1|10.1.1.10)) {
        set $maintenance off;
    }
    if ($maintenance = on) {
        return 503;
    }
    error_page 503 @maintenance;

    location @maintenance {
        root /var/www/html/global;
        rewrite ^(.*)$ /holding-page.html break;
    }

    root         html;
    access_log logs/doamin.tld.access.log;
    error_log logs/doamin.tld.error.log;

    include ../conf/default.d/location.conf;

}

将列表传递给$remote_addr而不是像(127.0.0.1 | etc ...)那样编码的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

使用nginx map directive根据$maintenance设置$remote_addr值:

map $remote_addr $maintenance {
    default       on;

    127.0.0.1     off;
    10.1.1.10     off;
    10.*.1.*     off;
}

server {
    server_name doamin.tld;

    if ($maintenance = on) {
        return 503;
    }
    # ... your code ...
}

如果您想将IP列表放在单独的文件中,请查看include directive