<span class=“js_title_inner“>紧急预警!Druid监控页面裸奔=服务器开门?Nginx 3步加固指南</span>

最近不少开发/运维同学反馈:项目上线后被安全扫描出高危漏洞——Druid监控页面未做任何校验,直接对外暴露!
可能有同学觉得“一个监控页面而已,能有什么风险?”
大错特错!未防护的Druid页面,相当于给黑客递上了服务器“说明书”:数据库连接信息、执行过的SQL(含手机号、密码等敏感参数)、JVM内存占用、服务器资源使用情况全被看得一清二楚,后续很可能引发数据泄露、服务器被攻击等严重问题。
今天就给大家分享一套 基于Nginx的Druid监控页面加固方案,涵盖“彻底关闭”“权限管控”两种核心场景,新手也能直接复制配置使用,建议收藏转发备用!
一、先搞懂:为什么Druid暴露是高危漏洞?
Druid是Java项目常用的数据源连接池,自带的监控页面(默认路径 /druid/* 或 /druid/index.html),初衷是方便开发者查看应用运行状态,但如果直接对外暴露且无校验,会泄露3类致命信息:
-
数据库核心信息:连接地址、用户名、连接池大小,黑客可直接尝试破解数据库;
-
业务敏感数据:执行过的全量SQL语句,可能包含用户手机号、身份证、支付密码等;
-
服务器/应用状态:JVM内存使用、CPU负载、接口调用链路,为黑客针对性攻击提供依据。
更可怕的是,很多项目上线时会忽略这个页面,导致它长期“裸奔”,成为安全扫描的高频漏洞点。

二、Nginx核心加固方案(按需选择)
Nginx作为前端反向代理,是拦截外部请求的“第一道防线”。我们可以通过Nginx配置,直接对Druid路径进行管控,以下是两种最实用的方案:
方案1:彻底关闭(推荐!无需监控场景)
如果生产环境不需要查看Druid监控,最安全的方式是直接拦截所有访问Druid路径的请求,返回403(拒绝访问)或404(伪装不存在)。
核心配置(直接复制到你的Nginx server块中):
server {
listen 80; # 你的端口,HTTPS则改为443
server_name your-domain.com; # 替换为你的域名/服务器IP
# 关键:拦截所有druid相关路径
location ~* druid {
return 403; # 拒绝访问,也可改为return 404; 伪装页面不存在
}
# 你的原有业务配置(转发到后端服务)
location / {
proxy_pass http://your-backend-server; # 替换为你的后端服务地址(如127.0.0.1:8080)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置说明:
-
location ~* druid:通过正则匹配所有链接中包括“druid”的请求,覆盖所有Druid相关页面; -
返回403还是404?403明确告知“禁止访问”,404让黑客误以为页面不存在,可根据需求选择;
-
配置后生效:执行
nginx -t校验配置,无错误后执行nginx -s reload重启Nginx。
方案2:保留监控+权限管控(需内部查看场景)
如果运维/开发需要查看监控,不能直接关闭,可通过“IP白名单”或“账号密码认证”限制访问(优先选IP白名单,更安全)。
方式2.1:IP白名单(仅允许内部IP访问)
只放行公司内网IP或运维人员的固定IP,其他外部IP一律拒绝,适合内部网络环境稳定的场景。
server {
listen 80;
server_name your-domain.com;
location ~* druid {
# 允许访问的内部IP/网段(替换为你的实际IP,多个用空格分隔)
allow 192.168.1.100; # 运维人员固定IP
allow 10.0.0.0/8; # 公司内网网段(示例)
deny all; # 拒绝所有其他IP
# 转发到后端Druid页面(保留原有代理配置)
proxy_pass http://your-backend-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 原有业务配置...
}
方式2.2:账号密码认证(需输入密码访问)
通过账号密码校验访问,适合需要跨网络查看监控的场景(如居家办公)。步骤分两步:生成密码文件 + 配置Nginx。
第一步:生成密码文件(需安装htpasswd工具)
# CentOS/RHEL系统安装
yum install httpd-tools -y
# Ubuntu/Debian系统安装
apt install apache2-utils -y
# 生成密码文件(创建用户admin,按提示输入密码)
# 注意:-c参数是创建新文件,若文件已存在,去掉-c避免覆盖
htpasswd -c /etc/nginx/conf.d/druid_passwd admin
第二步:配置Nginx认证
server {
listen 80;
server_name your-domain.com;
location ~* druid {
# 密码认证配置
auth_basic "Druid监控页面认证"; # 弹出的认证提示语
auth_basic_user_file /etc/nginx/conf.d/druid_passwd; # 刚才生成的密码文件路径
# 转发到后端
proxy_pass http://your-backend-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 原有业务配置...
}
配置生效后,访问/druid会弹出账号密码输入框,只有输入正确才能进入。
三、额外加固:应用层双重保障(关键!)
Nginx是“外层防护”,建议同时修改后端应用配置,实现双重加固,避免因Nginx配置失误导致漏洞:
-
生产环境直接关闭Druid监控(Spring Boot项目):
# application-prod.yml(生产环境配置文件)
spring:
datasource:
druid:
stat-view-servlet:
enabled: false # 关闭监控页面
-
若必须开启,在应用层也配置IP白名单:
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
allow: 192.168.1.0/24 # 仅允许内网网段访问
deny: 0.0.0.0/0 # 拒绝其他所有IP
-
检查其他暴露页面:除了Druid,还要排查/swagger/*、/actuator/*等监控/文档页面,统一做权限管控。

四、总结:3个核心注意点
-
优先彻底关闭:生产环境能不用Druid监控就不用,直接关闭是最安全的方案;
-
权限最小化:若必须保留,优先用IP白名单,其次用账号密码,绝对不能对外裸奔;
-
双重防护:Nginx外层拦截 + 应用层配置,避免单一防护失效。
最后提醒:配置完成后,一定要用外部IP测试一下——访问你的域名/druid,确认无法直接进入(或需要认证),才算加固成功!
如果觉得这篇指南有用,欢迎转发给身边的开发/运维同学,避免因小漏洞引发大风险~
你还遇到过哪些项目上线前的安全坑?评论区分享一下!
省钱小妙招
独家福利来啦!美团、饿了么、滴滴打车、菜鸟裹裹、电影票红包大放送!每天都有哦!
快来瞅瞅,动动手指就能省下一笔!别错过,赶紧按照文中操作领取你的专属红包吧!
如果你还有其他想要的红包类型,记得留言告诉我们哦,我们会尽力满足大家的需求!

更多推荐




所有评论(0)