我有一个带有 headers-more-nginx 模块的 Nginx 代理服务器,它将请求传递给 Exchange Server 2019。目前,每次我尝试连接到我的服务器时,Outlook 2019 都会陷入循环,要求输入凭据 - 它会要求输入密码,接受密码,然后再次询问。此问题在其他设备上重复出现。
Microsoft Store 中最新的 Outlook 运行正常。
此外,如果是 Netscaler 而不是 Nginx,一切正常,所以我认为 Nginx 配置错误,但我现在无法访问 Netscaler 配置。
我应该如何更改 Nginx 配置才能使其正常工作?
当前 nginx 配置:
http {
server {
listen 80;
listen 443 ssl;
server_name mail.mydomain.com;
ssl_certificate /etc/ssl/certs/mydomain.crt;
ssl_certificate_key /etc/ssl/certs/mydomain.key;
ssl_trusted_certificate /etc/ssl/certs/mydomain.crt;
ssl_session_timeout 5m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;" always;
location / {
proxy_pass_request_headers on;
keepalive_timeout 3h;
tcp_nodelay on;
client_max_body_size 3G;
#proxy_buffering off; # tried both on and off
#proxy_request_buffering off;
proxy_read_timeout 3600;
proxy_pass_header Date;
proxy_pass_header Server;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_set_header Connection "Keep-Alive";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
more_set_input_headers 'Authorization: $http_authorization';
# I tried to use Nginx's domain as well as domain of Exchange server, no luck
more_set_headers -s 401 'WWW-Authenticate: Basic realm="mail.mydomain.com"';
proxy_pass https://exchange$request_uri;
}
}
}
upstream exchange {
ip_hash;
server exchangeip1:443;
server exchangeip2:443;
}
听起来问题可能与 Nginx 如何处理身份验证标头和代理设置有关。您可以尝试进行以下几项调整来解决 Outlook 2019 的凭据循环问题:
Outlook 经常使用 NTLM 身份验证,而您当前的 Nginx 配置可能无法正确处理该身份验证。您可以使用 nginx-ntlm-module 来支持 NTLM 身份验证。您可以在此处找到更多信息和安装说明。
确保正确设置了 proxy_set_header 指令以处理身份验证标头。以下是包含 NTLM 支持的示例配置:
确保您的 SSL/TLS 证书配置正确且有效。有时,SSL/TLS 问题可能会导致重复的身份验证提示。
验证您的 Exchange Server 是否已配置为接受通过 Nginx 传递的身份验证方法。您可能需要调整 Exchange 命令行管理程序中的设置以确保兼容性。
检查 Nginx 错误日志,查找可能导致问题的任何线索。您可以增加日志级别以进行调试以获取更详细的信息。
如果这些步骤不能解决问题,您可能需要将有效的 Netscaler 配置与 Nginx 设置进行比较,以找出可能导致问题的任何差异。