Nginx 泛域名配置的隐患与对策
内容提要
Nginx泛域名配置存在安全隐患,如任意二级域名可访问网站,影响SEO和合规。对策包括:手动列出域名、使用白名单校验并重定向或断开连接、配置默认主机拒绝未备案域名、通过`ssl_reject_handshake`防止SNI泄露,以及为IP访问自签证书。同时可设置robots.txt避免CDN域名被收录。
延伸解读
泛域名绑定的风险
使用 *.example.com 这类泛域名绑定,虽然配置简单,但若网站程序未正确处理多站点,任意二级域名都能访问网站内容。这可能导致未预期的访问流量,影响 SEO 效果,并带来合规风险。文章指出,这种未预期行为可能源于他人故意构造链接并被爬虫抓取,从而引来不必要的访客。
白名单与重定向策略
为规避风险,文章建议在保留泛域名配置的同时,利用 Nginx 的 $host 变量进行白名单校验。将主域名放在 server_name 首位,便于后续处理。对于已废弃的二级域名(如 blog.example.com),可重定向到主域名;对于未预期的域名,则使用 return 444 直接断开连接,避免内容被访问。
默认主机与 IP 访问处理
默认主机同样存在风险,尤其在中国大陆,未备案域名指向服务器可能带来监管问题。文章建议默认主机直接断开所有连接,但若需支持 IP 访问,可通过正则匹配 IP 地址来放行。同时,为 HTTPS 配置 IP 专用自签证书,并设置 ssl_reject_handshake 防止 SNI 泄露,保护服务器与域名的关联信息。
CDN 域名收录控制
为避免 CDN 域名被搜索引擎收录,文章提供了通过 robots.txt 进行控制的方案。在 Nginx 中,针对特定主机(如 cdn.example.com)返回自定义的 robots.txt 内容,限制爬虫抓取,从而保护 CDN 资源不被索引,减少不必要的流量和潜在风险。
Q&A
Nginx 泛域名配置有什么安全隐患?
如果网站程序未正确处理多站点模式,任意二级域名都能访问网站内容,可能导致未预期的访问、影响SEO,并带来合规风险。
如何避免 Nginx 泛域名导致任意二级域名都能访问?
可以手动列出所有二级域名,或者使用白名单校验,对未预期的域名返回 444 断开连接,或重定向到主域名。
Nginx 中如何配置默认主机来拒绝未备案域名?
配置一个默认服务器块,设置 server_name _; 并返回 444 断开所有连接。
如何防止 SNI 域名泄露?
在 Nginx 的 server 块中设置 ssl_reject_handshake on; 来拒绝 SSL 握手,从而避免客户端获取 SNI 域名列表。
如何生成自签 IP 证书以支持 IP 直接访问?
使用 openssl 命令生成自签证书,例如:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ip.key -out ip.crt -subj "/CN=1.2.3.4" -addext "subjectAltName=IP:1.2.3.4"。
如何避免 CDN 域名被搜索引擎收录?
可以为 CDN 域名单独配置 robots.txt,例如在 Nginx 中根据 $host 判断,为 cdn.example.com 返回特定的 robots.txt 内容。