proxy_hide_header仅能屏蔽后端响应头中的敏感字段(如X-Internal-Host),对藏在响应体、日志或自定义非标头中的内网主机名和物理路径无效,需结合sub_filter、OpenResty/Lua或后端治理分层处理。

直接用 proxy_hide_header 无法过滤内网主机名或物理路径——因为这些信息通常不出现在响应头里,而是藏在响应体(如 HTML 错误页、JSON 错误详情、XML 响应)或日志中。真正要防泄露,得先定位信息在哪,再分层处理。
先确认敏感信息实际出现在哪
内网主机名(如 web01.internal)、物理路径(如 /opt/app/releases/v2.3.1/)极少作为标准响应头存在,常见暴露位置有:
- HTTP 错误页面内容:Spring Boot 的 Whitelabel Error Page、PHP 的 Fatal Error、Nginx 默认 50x 页面会显示服务器名或文件路径
-
API 响应体:后端返回的 JSON/XML 中带
"host": "db02.prod"或"stackTrace": "/var/www/app/src/Controller.php:42" -
自定义响应头:个别应用手动加了
X-Internal-Host、X-Deploy-Path等非标头 -
访问日志或错误日志:Nginx 自身日志若记录了
$host或$request_filename,也可能间接泄露
对自定义敏感响应头,用 proxy_hide_header 直接清除
如果后端确实通过响应头暴露了这类信息(比如 X-Internal-Host: web01.internal 或 X-Deploy-Path: /data/app/current),可在对应 location 块中逐行配置:
proxy_hide_header X-Internal-Host;proxy_hide_header X-Deploy-Path;proxy_hide_header X-Backend-IP;proxy_hide_header X-Cluster-Name;
注意:每个头必须单独一行;大小写不敏感但建议首字母大写;只对 proxy_pass 返回的响应生效,且必须写在 proxy_pass 之后。
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
对响应体里的主机名和路径,proxy_hide_header 无效,需换方案
响应体内容无法用 proxy_hide_header 处理,可行办法有:
-
后端源头治理:禁用错误堆栈(Spring Boot 设
server.error.include-stacktrace=never)、关闭调试模式、替换默认错误页 -
Nginx 替换文本(简单场景):启用
ngx_http_sub_module,例如:sub_filter 'web01.internal' 'hidden';sub_filter '/opt/app/' '/app/';sub_filter_types text/html text/plain application/json; - OpenResty + Lua(精准控制):解析 JSON 响应,删除或掩码特定字段,适合 API 网关级防护
防止日志中泄露,同步清理 Nginx 日志变量
检查 log_format 是否用了可能含敏感信息的变量:
- 避免使用
$hostname、$request_filename、$document_root - 改用安全变量,如
$remote_addr、$request_uri、$status - 若必须记录 host,确保是
$host(来自请求头),而非系统主机名
示例安全日志格式:log_format secure '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

















