温馨提示×

debian nginx怎样禁止ip访问

小樊
46
2026-10-21 02:21:04
栏目: 智能运维

在 Debian 下使用 Nginx 禁止 IP 直接访问(即通过 IP 而不是域名访问你的站点),常见有几种做法,按使用场景说明:


一、禁止通过 IP 直接访问(推荐做法)

方法 1:使用默认 server 拦截 IP 访问(最常用)

修改 or 新增一个默认 server:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    return 444;   # 444 是 Nginx 特有,直接断开连接
    # 或者
    # return 403;
}

如果你用的是 HTTPS:

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name _;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    return 444;
}

然后你的真实站点:

server {
    listen 80;
    server_name example.com www.example.com;

    # 正常配置
}

✅ 效果:

  • 通过 http://你的IP → 被拒绝
  • 通过 http://example.com → 正常访问

二、禁止指定 IP 访问(黑名单)

如果你只是想封某些 IP:

server {
    listen 80;
    server_name example.com;

    deny 1.2.3.4;
    deny 192.168.1.0/24;
    allow all;

    location / {
        root /var/www/html;
    }
}
  • deny:拒绝
  • allow:允许
  • 按顺序匹配

三、只允许指定 IP 访问(白名单)

location / {
    allow 127.0.0.1;
    allow 10.0.0.0/8;
    deny all;
}

四、禁止非法 Host 头(防恶意解析)

if ($host !~* ^(example.com|www.example.com)$) {
    return 403;
}

⚠️ 不推荐大量使用 if,但简单场景可用。


五、修改后操作(Debian)

sudo nginx -t
sudo systemctl reload nginx

总结建议

需求 推荐方式
禁止 IP 直接访问 default_server + return 444
封某个 IP deny
只允许部分 IP allow + deny all
防别人解析到你的 IP default_server

如果你愿意,可以告诉我:

  • 是否用了 HTTPS
  • 单站点还是多站点
  • 想返回 403 还是直接断开

我可以帮你写一套完整配置。

0 踩