NGINX限制允许指定IP请求

在 Nginx 里“只允许某些 IP 访问”有两种常见需求:

  • 整块虚拟主机 / 整站仅允许指定 IP
  • 某个 location(目录、接口)仅允许指定 IP

1、允许访问整个server,整站白名单,白名单内IP可以请求,如下:

#只有192.168.1.100和10段的能访问
server {
    listen 80;
    server_name example.com;

    # 白名单
    allow 192.168.1.100;   # 单个 IP
    allow 10.0.0.0/24;     # 网段
    deny  all;              # 其余全部拒绝

    root /var/www/html;
}

注:先写allow,在写deny,先允许再拒绝

2、指定的接口,目录白名单,如下:

#只有192.168.1.100和203.0.113段能请求/admin接口
server {
    listen 80;
    server_name example.com;

    location /admin/ {
        allow 192.168.1.100;
        allow 203.0.113.0/24;
        deny  all;

        # 其余正常配置
        proxy_pass http://backend;
    }

    # 其他 location 不受限制
    location / {
        root /var/www/html;
    }
}

如果Nginx的外层还有CDN或者负载均衡,需要在server或者http块中配置获取真实IP,如下:

set_real_ip_from 100.64.0.0/10;   #阿里云官方的回源地址,不是SLB的公网IP
real_ip_header    X-Forwarded-For;
real_ip_recursive on;

然后再配置allow和deny即可

标签