Nginx禁止直接用IP访问网站返回444配置 Nginx
前言
很多服务器直接用 IP 地址就能打开网站,搜索引擎可能收录 IP 页面,恶意扫描也会直接访问 IP。规范做法是:只允许绑定域名访问,直接用 IP 访问时让 Nginx 返回 444(Nginx 专有状态码,表示直接断开连接,不返回任何内容)。本文给出 server 块配置、默认服务阻断、重载验证的完整写法,适配单站点和多站点。
操作步骤
1. 在站点配置前增加一个默认 server
在 nginx.conf 或站点配置文件最前面加:
server {
listen 80 default_server;
server_name _;
return 444;
}
default_server 表示所有未匹配域名的请求都落到这个块。
2. HTTPS 同理阻断 IP 访问
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /www/ssl/default.crt;
ssl_certificate_key /www/ssl/default.key;
return 444;
}
没有默认证书时,HTTPS 的 IP 访问会先报证书错误,可只阻断 80。
3. 正式站点 server 块只写域名
server {
listen 80;
server_name www.example.com example.com;
root /www/example;
index index.html;
}
4. 校验并重载 Nginx
nginx -t
nginx -s reload
5. 验证 IP 访问被拒绝
curl -I http://服务器IP
返回空响应、连接被断开,HTTP 状态为 444 即成功;域名访问保持正常。
常见坑
- 只写 servername 没加 default_server,IP 请求仍落到第一个 server 块。
- 多站点配置里有多个 listen 80,default_server 必须唯一,否则冲突报错。
- 用 return 403 会返回状态码和页面,444 才是直接断开,按需选择。
- HTTPS 阻断缺少默认证书,浏览器先报证书警告,达不到静默断开。
- 改完没 nginx -t 校验,语法错误导致 reload 失败、全站中断。
- 反代到后端时,IP 访问可能被上游服务响应,务必在 Nginx 层先拦截。
总结
禁止 IP 访问的核心是配置一个 default_server 块,server_name 用下划线占位并 return 444,让所有未绑定域名的请求直接断开。正式站点只保留域名 server 块。配置后用 curl 测 IP、用域名分别验证,确保只拦 IP 不误伤正常访问。
遇到问题加QQ23979811 协助处理