You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何阻止AWS弹性IP及公共DNS直接解析HTTP请求?

哈哈,这个问题我碰到过好多次了!要阻止直接用弹性IP或AWS公共DNS访问你的网站,最优方案其实是在Web服务器层面做域名校验——既高效又不用额外花钱,当然如果你的场景更复杂,也可以搭配AWS的服务来实现。下面给你分场景具体说:

方法一:Web服务器层面配置(最优推荐)

这是最直接的方案,所有非指定域名的请求(包括弹性IP、公共DNS)都会被拦截,完全不需要依赖AWS额外服务。

针对Nginx的配置

修改你的Nginx站点配置文件(通常在/etc/nginx/sites-available//etc/nginx/conf.d/下),添加一个默认server块来拦截非法请求:

# 默认server:匹配所有未指定域名的请求(IP、公共DNS都算)
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _; # 通配符匹配所有未被其他server块捕获的请求
    return 403; # 直接返回禁止访问,也可以改成跳转到你的域名:return 301 https://your-domain.com$request_uri;
}

# 你的正常域名处理server块
server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com www.your-domain.com; # 替换成你的实际域名

    # 下面是你原本的网站配置
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

配置完后重启Nginx生效:sudo systemctl restart nginx

针对Apache的配置

修改Apache的虚拟主机配置(通常在/etc/apache2/sites-available/下),设置默认虚拟主机拦截非法请求:

# 默认虚拟主机:拦截所有非指定域名的请求
<VirtualHost *:80>
    ServerName _default_
    Redirect 403 /
    ErrorDocument 403 "Forbidden: Access only allowed via your official domain"
</VirtualHost>

# 你的正常域名虚拟主机
<VirtualHost *:80>
    ServerName your-domain.com
    ServerAlias www.your-domain.com
    DocumentRoot /var/www/html

    # 原本的网站目录权限配置
    <Directory /var/www/html>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

配置完后重启Apache生效:sudo systemctl restart apache2

方法二:AWS WAF(适合多实例/复杂场景)

如果你用了ALB(应用负载均衡)或者有多个EC2实例,不想在每个服务器上单独配置,可以用AWS WAF统一拦截:

  • 创建一个WAF规则,匹配HTTP请求的Host头不等于你的域名(比如your-domain.comwww.your-domain.com
  • 将这个规则设置为“阻止”动作,关联到你的ALB或CloudFront(如果用了CDN)
    这种方案适合企业级场景,但会产生额外的WAF使用成本。
额外注意事项
  • 如果你后续配置了HTTPS(强烈建议),记得在443端口的配置里也加上同样的默认拦截规则,不然通过IP访问HTTPS仍能绕过限制
  • 要是用了CloudFront等CDN,也要在CDN的行为设置里开启“限制查看器访问”,只允许指定域名的请求通过,彻底堵死绕开CDN直接访问IP的可能

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

火山引擎 最新活动