Nginx不原生支持NTLM协议,所谓“支持”实为通过ip_hash绑定客户端IP、keepalive维持长连接、proxy_http_version 1.1透传HTTP/1.1连接等组合策略,强制三次NTLM握手落在同一后端;真正稳定方案是迁移到Kerberos认证。

Nginx 没有 ntlm 参数,也不支持在 upstream 块中直接配置 NTLM 协议相关指令。所谓“NTLM 支持”,其实是通过连接控制策略来 间接适配 NTLM 的有状态握手流程,而不是真正解析或中继 NTLM 认证。
微软办公软件(如 SharePoint、旧版 Dynamics 365、Exchange OWA 等)若仍依赖 NTLM 身份验证,其反向代理必须确保客户端的三次 NTLM 握手(NEGOTIATE → CHALLENGE → AUTHENTICATE)全部落在同一台后端服务器上——否则认证必然失败。
因此,“反代轮询”与“NTLM 兼容”本质上是冲突的:轮询会打散请求,而 NTLM 要求粘性。你无法同时启用标准轮询 + NTLM。
✅ 正确做法:用连接粘性替代轮询
使用 ip_hash 实现会话绑定
这是最常用、配置最简的方式,适用于客户端 IP 相对稳定(如内网办公环境):
upstream office_ntlm {
ip_hash; # 强制同一IP始终打到同一台后端
server 10.1.20.5:80 max_fails=2 fail_timeout=10s;
server 10.1.20.6:80 max_fails=2 fail_timeout=10s;
keepalive 60; # 维持长连接池,减少握手中断
}⚠️ 注意:
ip_hash对 NAT 环境(如多个用户共用一个出口 IP)不友好,会导致所有用户被路由到同一台后端,造成负载不均甚至单点过载。
配合 HTTP/1.1 长连接关键设置
在 location 块中必须显式启用持久连接,并透传连接头:
location / {
proxy_pass http://office_ntlm;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}-
proxy_http_version 1.1:NTLM 依赖 HTTP/1.1 的流水线和连接复用能力 -
proxy_set_header Connection "":清空 Connection 头,防止 NGINX 或中间设备关闭长连接
❌ 不可行的做法(常见误区)
- 在 upstream 中写
ntlm on;或ntlm_pass on;→ 语法错误,NGINX 不识别 - 同时启用
least_conn/round-robin+ NTLM → 认证必失败,因三次请求会被分散 - 仅加
keepalive但没ip_hash→ 连接可能复用,但首次握手仍可能跨节点
? 更现代、更推荐的替代方案
NTLM 已被微软标记为遗留协议,存在安全风险(无服务端验证、易受中继攻击),且难以扩展。强烈建议迁移到:
✅ Kerberos + SPN
- 后端 IIS 启用 Windows 身份验证,强制协商 Kerberos(注册正确 SPN,禁用 NTLM 回退)
- NGINX 只需透传
Authorization头,无需任何特殊 upstream 设置 - 此时可自由使用轮询、权重、健康检查等全部负载均衡策略
upstream office_kerb {
server 10.1.20.5:80 weight=2;
server 10.1.20.6:80 weight=1;
# 完全不需要 ip_hash 或 keepalive 特殊配置
}Kerberos 票据由域控签发,验证逻辑完全在客户端和服务端完成,NGINX 是纯透传角色。
? 总结:该选什么?
| 场景 | 推荐方式 |
|---|---|
| 短期维持老旧系统(如 Win Server 2008 + SharePoint 2013) |
ip_hash + keepalive + HTTP/1.1 显式配置 |
| 内网用户固定、IP 不共享、无安全审计压力 | 可用,但需监控单节点压力 |
| 新建或可改造环境(AD 域已就绪) | 立即切换 Kerberos,彻底摆脱 NTLM 粘性限制 |
| 无法改造后端,又要求高可用+公平分发 | 改用 Windows NLB 或 Azure Load Balancer(原生感知 NTLM 流量) |
不复杂但容易忽略:NTLM 不是配置问题,而是协议约束。强行“轮询 NTLM”等于要求三步舞蹈由三个不同舞伴完成——节奏一乱,整个认证就垮了。


















