在宝塔面板创建ip为域名的兜底站点并设为默认,配置中添加return 444;且同时监听80和443端口(含ssl占位证书),可静默拦截所有未绑定域名的http/https直连请求。

直接在宝塔面板里建一个「空主机头兜底站点」,再往它的 Nginx 配置里加 return 444;,就能有效拦截所有未绑定域名的 IP 直连请求。这不是障眼法,是 Nginx 原生支持的连接静默关闭机制,比 return 404 更干净——不发任何响应体,客户端直接断连。
创建默认站点并设为兜底入口
这个站点不提供内容,只起路由拦截作用。关键点在于:域名必须填服务器 IP(比如 192.168.1.100),不能留空或写 _;网站目录可以随便指定(如 /www/wwwroot/default),但必须真实存在且有读权限。
- 登录宝塔 → 左侧「网站」→ 右上角「添加站点」
- 「域名」栏粘贴你的公网/内网 IP 地址(不要带
http://) - 「根目录」填一个空目录路径,确保该路径已创建且 Nginx 有权限读取
- 提交后,在网站列表中找到它,点击「设置」→「基本设置」→ 拉到底部勾选「设为默认站点」
在配置文件里插入 return 444;
return 444; 必须放在 server { } 块内、所有 location { } 块之外的位置。放错地方会导致语法错误或完全不生效。别用 403 或 404 替代——前者可能被爬虫识别为“有站”,后者会返回 HTML 页面,反而暴露服务指纹。
- 进入该默认站点的「设置」→「配置文件」
- 找到
server {开始的大括号块,在最后一行}之前插入:return 444; - 确认没有拼写错误(比如写成
retun或漏掉分号) - 保存后,立刻点左上角「重载 Nginx」,不是重启,也不是重载 PHP
HTTPS 场景下必须显式监听 443 端口
如果用户用 https://[IP] 访问,而你只在 80 端口写了 return 444;,Nginx 会因找不到匹配的 SSL server 块而 fallback 到其他站点,导致失效。必须让这个兜底 server 同时监听 443 并声明 SSL 支持。
- 在同一个
server { }块里,把listen 80 default_server;改成:listen 80 default_server; listen 443 ssl http2 default_server; - 紧接着加上 SSL 证书路径(哪怕只是占位):
ssl_certificate /www/server/panel/ssl/certificate.pem; ssl_certificate_key /www/server/panel/ssl/privateKey.pem; - 这两行证书路径是宝塔自动生成的默认路径,即使没配 HTTPS 域名也能防止 Nginx 启动报错
验证是否生效的三个必做动作
别只用浏览器访问 IP 就以为成功了。Nginx 的 default_server 匹配逻辑很细,容易被已有配置干扰,必须逐项验证。
- 用
curl -I http://[你的IP]和curl -I https://[你的IP]分别看响应头,状态码应为HTTP/1.1 444,且无Content-Length或Server字段 - 检查 Nginx 错误日志:
tail -f /www/wwwlogs/nginx_error.log,访问 IP 时不应出现no host name to match或SSL_do_handshake() failed - 确认没有其他站点的配置文件里写了
server_name _;或空server_name,这种配置会抢走 default_server 权限
最常被忽略的是 HTTPS 那一节:很多人只处理了 80 端口,结果攻击者换用 https:// 就绕过去了。只要你的服务器开了 443 端口,兜底规则就必须覆盖它,否则等于没设。











