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

如何限制ASP.NET MVC站点仅允许DNS访问,屏蔽IP直连?

当然可以实现这个需求!下面我给你几个不同层级的解决方案,从应用代码到AWS基础设施层面都有,你可以根据自己的情况选最合适的:

方案1:ASP.NET MVC 应用层直接拦截(无需修改EB配置)

这是最直接的方式,不用动AWS后台的配置,直接在应用里加请求检查逻辑,能拦截所有通过IP访问的请求——包括控制器接口、图片、脚本这些静态资源。

你可以在Global.asax里的Application_BeginRequest方法里加判断:

protected void Application_BeginRequest()
{
    var requestHost = Request.Url.Host;
    // 检查请求的Host是否是IP地址(兼容IPv4和IPv6)
    if (IsIpAddress(requestHost))
    {
        Response.StatusCode = 403;
        Response.ContentType = "text/plain";
        Response.Write("Access denied: Please use our official domain.");
        Response.End();
        // 也可以选择永久重定向到你的域名,比如:
        // Response.RedirectPermanent($"https://example.com{Request.Url.PathAndQuery}");
    }
}

private bool IsIpAddress(string host)
{
    // 用.NET内置方法判断是否为合法IP
    return System.Net.IPAddress.TryParse(host, out _);
}

这个方法会在每个请求进来时先做检查,只要是IP访问就直接返回403,完全符合你的需求。

方案2:利用Elastic Beanstalk负载均衡器拦截(基础设施层)

如果你的EB环境用了Application Load Balancer(ALB),可以直接在负载均衡器层面拦截IP请求,不用让请求传到应用服务器,能节省资源。

操作步骤大概是:

  • 登录AWS控制台,进入EC2服务,找到你的EB环境对应的负载均衡器
  • 切换到「监听器」标签,编辑HTTPS/HTTP的监听器规则
  • 新增一条规则,条件选「主机头」,匹配方式设为「不等于」,输入你的域名example.com(多个域名可以加多个条件)
  • 动作选择「返回固定响应」,状态码设为403,还可以自定义提示内容
  • 把这条规则移到所有规则的最前面,确保优先执行

这样所有通过负载均衡器IP的请求,都会被直接拦截返回403。

方案3:修改EB的Web服务器配置(Nginx/Apache)

如果你的EB环境用的是Nginx(.NET Core环境默认是Nginx,.NET Framework也可以配置)或者Apache,可以修改服务器配置文件来拦截IP访问。

比如对于Nginx,你可以在项目根目录的.ebextensions文件夹里创建nginx-block-ip.config:

files:
  "/etc/nginx/conf.d/block_ip_access.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      server {
          listen 80;
          listen 443 ssl;
          # 匹配所有IPv4和IPv6格式的Host头
          server_name ~^\d+\.\d+\.\d+\.\d+$ ~^\[?[0-9a-fA-F:]+\]?$;
          return 403 "Access denied: Use official domain only";
      }

部署后,Nginx会直接拦截所有IP访问的请求,返回403。如果是Apache环境,类似地可以通过配置Rewrite规则实现同样效果。

注意事项
  • 如果你用了ALB,要注意ALB本身也有公网IP,所以不管用哪种方案,都要确保IP访问的路径被覆盖到
  • 测试时记得验证静态资源的拦截情况,比如直接访问https://1.2.3.4/scripts/app.js,应该返回403
  • 如果有CDN等前端代理,要确保CDN请求时传递正确的Host头,避免误拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:27:36