在使用宝塔面板搭建网站的过程中,许多用户忽略了一个关键的安全隐患:默认情况下,Nginx 会允许通过服务器 IP 地址直接访问站点。如果服务器开启了 HTTPS,这种访问方式可能会暴露 SSL 证书中绑定的真实域名,进而导致服务器 IP 被识别并关联到具体域名,带来潜在安全风险。
为了避免这种情况,我们需要对 Nginx 进行配置优化,禁止IP直接访问,并返回 ERR_EMPTY_RESPONSE
(状态码 444)以防止暴露任何内容。
为什么要禁止IP直接访问?
-
防止SSL证书泄露域名信息:
当有人通过 IP 地址访问你的 HTTPS 服务时,Nginx 默认会返回第一个可用的证书。如果该证书属于你的真实域名,攻击者就能通过扫描 SSL 证书信息获取你的域名。 -
防止被扫描器批量识别:
网络中存在大量工具可以扫描全网 IP,读取返回的 SSL 证书信息来构建域名-IP映射,从而开展针对性攻击。
配置目标
我们希望实现以下两个目的:
-
给 IP 分配一张与自身无关的“伪造”证书(非真实域名)
-
访问 IP(HTTP 或 HTTPS)统一返回状态码
444
,即ERR_EMPTY_RESPONSE
,中止连接响应
配置步骤详解(宝塔面板)
第一步:创建默认站点
-
登录宝塔面板
-
新建一个网站,域名随意填写(请勿使用你真实域名,如
fake.domain.com
) -
宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式
-
创建后,设置其为 默认站点
-
宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式
第二步:为默认站点配置伪造SSL证书
-
可以使用 Cloudflare 或其他平台申请一个与真实业务无关的域名证书。
- 我们这里使用了cdn.bnxb.com来接入,利用CNAME接入的漏洞,我们添加了一个dnspod.com然后生成了属于 dnspod.com的证书
-
大家可以使用我们已经生成的这张证书,反正只要域名不是你真实的域名就行了,提供如下(可直接使用):
伪造SSL证书内容(示例):
证书(Certificate)
-----BEGIN CERTIFICATE-----
MIIDITCCAsagAwIBAgIUTcEWLzynkLCFCoAC1iDH2vG3EkYwCgYIKoZIzj0EAwIw
gY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTgwNgYDVQQL
Ey9DbG91ZEZsYXJlIE9yaWdpbiBTU0wgRUNDIENlcnRpZmljYXRlIEF1dGhvcml0
eTAeFw0xOTAxMTMxNDMxMDBaFw0zNDAxMDkxNDMxMDBaMGIxGTAXBgNVBAoTEENs
b3VkRmxhcmUsIEluYy4xHTAbBgNVBAsTFENsb3VkRmxhcmUgT3JpZ2luIENBMSYw
JAYDVQQDEx1DbG91ZEZsYXJlIE9yaWdpbiBDZXJ0aWZpY2F0ZTBZMBMGByqGSM49
AgEGCCqGSM49AwEHA0IABAg/hZ9lDHj/f+0jDRAN23TkNEqIi46mCGnwZVD3glxL
l+a1mpfXLHSEFTipnSyQgmvkPYzQGaEIFD0q6W/ZgMujggEqMIIBJjAOBgNVHQ8B
Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB
/wQCMAAwHQYDVR0OBBYEFCEZF6Eyem01XPbgwr6DXLZV1qsQMB8GA1UdIwQYMBaA
FIUwXTsqcNTt1ZJnB/3rObQaDjinMEQGCCsGAQUFBwEBBDgwNjA0BggrBgEFBQcw
AYYoaHR0cDovL29jc3AuY2xvdWRmbGFyZS5jb20vb3JpZ2luX2VjY19jYTAjBgNV
HREEHDAaggwqLmRuc3BvZC5jb22CCmRuc3BvZC5jb20wPAYDVR0fBDUwMzAxoC+g
LYYraHR0cDovL2NybC5jbG91ZGZsYXJlLmNvbS9vcmlnaW5fZWNjX2NhLmNybDAK
BggqhkjOPQQDAgNJADBGAiEAnrequCk/QZOOrcPH6C3Hgcy4SPNUy5rQtku/aYkj
qQoCIQCN6IyYNiXuwG+8jUgJrveiirBjiz2jXZSTEfVAyibjTg==
-----END CERTIFICATE-----
私钥(Private Key)
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK0HE3hTJQDg6p/fj
nS92eSuRKZEZ5F4grT6tWFKNYVmhRANCAAQIP4WfZQx4/3/tIw0QDdt05DRKiIuO
pghp8GVQ94JcS5fmtZqX1yx0hBU4qZ0skIJr5D2M0BmhCBQ9Kulv2YDL
-----END PRIVATE KEY-----
将这些内容填写到宝塔默认站点的 SSL 设置中,保存即可。

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式
第三步:修改Nginx默认站点配置
点击该默认站点的配置文件(conf
),修改最顶部的 server
块如下:
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /www/server/panel/vhost/cert/default.46.la/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/default.46.la/privkey.pem;
return 444;
}

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式
大功告成,现在直接访问HTTP://IP 或者HTTPS://IP
就会出现这样的提示

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式
不论是通过 HTTP 还是 HTTPS 请求 IP,都会被直接中断连接,不会暴露任何信息。
推荐:使用Nginx 1.19以上版本的原生方式(可选)
Nginx 在 1.19.4+ 版本引入了 ssl_reject_handshake
指令,可直接中止 TLS 握手,避免返回任何证书信息。
示例配置:
server {
listen 443 ssl http2 default_server;
server_name _;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_reject_handshake on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
access_log /www/wwwlogs/access.log;
}
✅ 注意:需确认你的 Nginx 编译版本支持该指令(
nginx -V
查看),同时使用 OpenSSL 1.1.1i 或以上。
配置效果验证
完成以上配置后,通过浏览器访问:
-
http://<你的IP>
-
https://<你的IP>
会发现页面无法打开,并提示 ERR_EMPTY_RESPONSE
,意味着配置生效,任何尝试直接通过 IP 获取内容或证书信息的行为都将失败。
总结
通过以上设置,我们成功实现了以下目标:
-
禁止 IP 访问站点内容
-
避免 SSL 泄露真实域名
-
提升服务器整体安全性
建议所有使用宝塔+Nginx 部署网站的站长都参考本教程进行配置,防止因 IP 暴露而带来的安全风险。