在 Debian 下使用 Nginx 禁止 IP 直接访问(即通过 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:
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:允许location / {
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
if ($host !~* ^(example.com|www.example.com)$) {
return 403;
}
⚠️ 不推荐大量使用 if,但简单场景可用。
sudo nginx -t
sudo systemctl reload nginx
| 需求 | 推荐方式 |
|---|---|
| 禁止 IP 直接访问 | default_server + return 444 |
| 封某个 IP | deny |
| 只允许部分 IP | allow + deny all |
| 防别人解析到你的 IP | default_server |
如果你愿意,可以告诉我:
我可以帮你写一套完整配置。