You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NGINX中同时仅允许指定域名与指定IP访问

实现方案

该需求可直接通过NGINX自带的访问控制、Host头校验能力实现,无需额外安装第三方模块,具体配置如下:

场景1:满足「来源为指定IP」或「访问指定域名」任一条件即可放行

http {
    # 定义允许放行的来源IP白名单,支持单个IP或IP段
    geo $allowed_ip {
        default 0;
        192.168.1.100/32 1;
        10.0.0.0/24 1;
    }

    # 定义允许放行的访问域名白名单
    map $host $allowed_host {
        default 0;
        example.com 1;
        www.example.com 1;
    }

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        
        # 配置默认服务块的SSL证书,避免HTTPS请求握手报错
        ssl_certificate /path/to/default/cert.pem;
        ssl_certificate_key /path/to/default/cert.key;

        # 访问校验逻辑
        set $block 0;
        if ($allowed_ip = 0) {
            set $block "${block}1";
        }
        if ($allowed_host = 0) {
            set $block "${block}2";
        }
        # 既不在IP白名单也不在域名白名单的请求直接返回444断开连接
        if ($block = 012) {
            return 444;
        }

        # 下方填写正常的站点配置
        # root /path/to/webroot;
        # index index.html index.htm;
    }
}

场景2:必须同时满足「来源为指定IP+访问指定域名」才可放行

将上述校验逻辑替换为以下内容即可:

if ($allowed_ip = 0) {
    return 444;
}
if ($allowed_host = 0) {
    return 444;
}

生效说明

  • 配置修改后先执行nginx -t校验语法是否正确,确认返回test is successful后再执行nginx -s reload生效
  • 必须配置default_server默认服务块,确保所有未绑定域名、泛解析的请求都会进入校验逻辑
  • 若存在多个站点服务块,可将校验逻辑抽为独立的access_check.conf文件,在每个server块内通过include /path/to/access_check.conf引入即可,无需重复编写配置

内容的提问来源于stack exchange,提问作者Paul Townsend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:54:03