NginX:如何在 http 级别拒绝 IP,但在某些服务器级别允许所有 IP?

NginX:如何在 http 级别拒绝 IP,但在某些服务器级别允许所有 IP?

我有 Nginx,其中定义了许多“服务”(网站)。我想拒绝大量 IP 地址(主要是国际)访问所有这些服务,但同时我想“允许”不受限制地访问一些可公开访问的网站。是否可以使用免费的 Windows 版 Nginx 来实现这一点?

这是我的配置文件的结构:

http {
    # common statements here;
    server {
        server_name   publicsite.web;
        # some settings;
        allow all;
    }

    deny    1.0.0.0/8;
    deny    2.0.0.0/8;
    # everything below should be denied to the listed IP's 

    server {
        server_name   privatesite1.domain.web;
        # some settings;
    }
    server {
        server_name   privatesite99.web;
        # some settings;
    }
}

我尝试了这样的配置,但是“publicsite.web”被拒绝访问其 server{} 块下列出的 IP,我猜是因为它们处于 http 级别,即使它们在下面列出。

我知道最简单的选择是将所有“拒绝”IP 列在一个单独的文件中(顺便说一下,已经是了),并将它们包含在每个应该遵守拒绝的 server{} 块内。考虑到可能有多达一百个这样的 server{} 块和一百多个拒绝 IP 子网块,我担心配置可能会变得过于复杂和庞大,从而影响服务器性能。

有没有比在每个服务器{}块中包含相同的拒绝 IP 列表更好的选择?

相关内容