nginx https配置需满足加密传输、身份可信、行为可溯、访问可控四维度:使用受信证书并设600权限;启用tlsv1.2+、强加密套件及ocsp stapling;记录含真实ip、ssl协议/密钥套件的审计日志;实施ip白名单、http方法限制与敏感信息隐藏;区分反向代理(终结tls)与正向代理(透传connect隧道)场景。

要让 Nginx 的 HTTPS 配置真正满足企业级安全审计需求,不能只停留在“能用 HTTPS”层面——必须兼顾加密传输、身份可信、行为可溯、访问可控四个维度。单纯配个 ssl_certificate 只是起点,审计关注的是“谁在何时访问了什么、是否合规、有无异常”。
一、HTTPS 基础配置必须合规且健壮
使用受信证书(如 Let’s Encrypt 的 DV 证书或商业 OV/EV 证书),避免自签名;证书与私钥应存于 /etc/nginx/ssl/ 并设权限为 600。配置中需明确指定:
-
listen 443 ssl,禁用不安全协议:ssl_protocols TLSv1.2 TLSv1.3 - 启用强加密套件,例如:
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...' - 开启 OCSP Stapling:
ssl_stapling on; ssl_stapling_verify on;,并配置resolver - 添加关键安全响应头:
Strict-Transport-Security(HSTS)、X-Content-Type-Options、X-Frame-Options等
二、日志必须记录审计关键字段
默认 combined 日志不包含客户端真实 IP(经代理时)和完整请求上下文。需自定义 log_format 并启用必要变量:
- 用
$http_x_forwarded_for或$realip_remote_addr(配合set_real_ip_from)还原原始客户端 IP - 记录请求时间、HTTP 方法、URI、状态码、响应体大小、User-Agent、Referer
- 对 HTTPS 请求,建议额外记录
$ssl_protocol和$ssl_cipher,便于分析加密强度是否达标 - 示例格式:
log_format audit '$remote_addr - $http_x_forwarded_for [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $ssl_protocol/$ssl_cipher';
三、访问控制与行为限制不可缺失
审计要求“最小权限原则”,Nginx 需主动过滤和约束流量:
- 按 IP 段限制访问:如
allow 10.10.0.0/16; deny all;放在location或server块中 - 用
geo+map实现动态白名单,例如只允许可信域名的出站请求(适用于正向代理场景) - 限制 HTTP 方法:非必要禁用
PUT、DELETE、TRACE等高风险方法 - 隐藏敏感信息:设置
server_tokens off;,避免暴露 Nginx 版本号
四、区分正向与反向代理场景,避免审计误判
很多审计失败源于混淆用途:
- 对外提供 Web 服务 → 用标准 HTTPS 反向代理(后端是 HTTP/HTTPS 应用,Nginx 终结 TLS)
- 内网客户端需安全出网 → 必须配置 HTTPS 正向代理,需编译加载
ngx_http_proxy_connect_module,监听普通端口(如 3128),不配 ssl_certificate,仅透传 CONNECT 隧道 - 正向代理日志中必须提取
$request中的域名和端口(如CONNECT example.com:443 HTTP/1.1),这是审计溯源核心依据











