Files
wecom_it_smart_desk/docs/ADRs/ADR-003-nginx-access_log关闭.md
T
Simon 64d6812ec3 fix: P0遗留修复 + ADR/SOP文档
- requirements.txt: 添加 passlib[bcrypt] 依赖
- deploy-server/nginx.conf: /ws/ 路径添加 access_log off
- docs/ADRs/: 新增 4 个 ADR 决策记录
- docs/SOPs/: 新增 4 个 SOP 操作规程
2026-06-15 00:03:11 +08:00

2.6 KiB

ADR-003: nginx 敏感路径 access_log 关闭

状态: 已采纳 日期: 2026-06-14 决策者: 宋献 + Claude 评审 关联: 风险跟踪表 第十节 / 评审报告 workbuddy-2026-06-14-P0安全.md


1. 背景

nginx access_log 默认记录所有请求,含敏感信息:

  • Authorization: Bearer <token>
  • ?token=<JWT>
  • Cookie: session=<sid>

敏感路径必须关闭 access_log,避免 token 永久落盘。

2. 决策

敏感路径一律 access_log off,具体见下表。

3. 关闭清单

路径 原因 access_log
/ws/ WebSocket token 鉴权 off
/api/v1/auth/login 密码登录 off
/api/v1/auth/refresh token 刷新 off
/api/v1/h5/oauth/callback OAuth2 回调 off
/api/v1/wecom/callback 企微回调(验证 URL 含 echostr) off
/api/v1/agents/login 坐席登录 off
/api/v1/upload* 文件上传(可能含敏感文件名) off
/health /healthz /readyz 健康检查(高频) off

4. 实现

server {
    # 全局
    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    # WS(敏感)
    location /ws/ {
        access_log off;
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 登录(敏感)
    location ~ ^/api/v1/(auth|agents)/login$ {
        access_log off;
        proxy_pass http://backend;
    }

    # 健康检查(高频)
    location ~ ^/(health|healthz|readyz)$ {
        access_log off;
        proxy_pass http://backend;
    }

    # 其它
    location / {
        proxy_pass http://backend;
    }
}

5. error_log 仍开启

⚠️ error_log 仍开 —— 4xx/5xx 错误需要留痕(token 在 error log 里出现频率低,且 error log 有 TTL 自动切割)。

6. 日志清理脚本

/etc/logrotate.d/nginx 配:

/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi
    endscript
    postrotate
        invoke-rc.d nginx rotate >/dev/null 2>&1
    endscript
}

7. 风险与缓解

风险 缓解
漏关某个敏感路径 定期审计(任务 W-5,workbuddy 跑)
调试时无 access_log 难定位 debug 时临时开 access_log /tmp/debug.log;
攻击者利用关闭日志 error_log 仍开,异常请求有记录