配置Nginx反向代理TFS时遇ERR_TOO_MANY_REDIRECTS问题求助
解决Nginx反向代理TFS时的ERR_TOO_MANY_REDIRECTS问题
这个错误十有八九是Nginx和TFS之间的重定向循环搞出来的——你已经让Nginx把所有HTTP请求强制转到HTTPS了,但如果TFS本身也在试图强制HTTPS(或者它不知道外部是通过HTTPS访问的,误以为当前请求是HTTP,所以又发重定向到HTTPS),就会形成无限跳转的死循环。
先看你现有配置的问题:你把HTTPS请求转发给了TFS的80端口(HTTP),但TFS可能默认会把HTTP请求重定向到HTTPS,或者它需要知道外部的访问协议是HTTPS,否则就会触发内部重定向,导致Nginx和TFS来回踢皮球。
下面是修改后的完整Nginx配置,我会标注关键改动点:
# 处理HTTP请求,强制跳转到HTTPS server { listen 80 default; server_name tfs.domain.com; return 301 https://$host$request_uri; } # 定义TFS上游服务器(改名是为了可读性更好) upstream tfs_backend { server 12.34.56.78:80; # 你的本地TFS地址和端口 keepalive 16; } # 处理HTTPS请求并反向代理到TFS server { listen 443 ssl; server_name tfs.domain.com; # 自签名SSL证书配置(补全你的私钥路径) ssl_certificate /etc/nginx/ssl/tfs.domain.com.pem; ssl_certificate_key /etc/nginx/ssl/tfs.domain.com.key; # 核心:告诉TFS外部的访问协议是HTTPS,避免它触发不必要的重定向 proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header Host $host; # 转发请求到TFS上游 location / { proxy_pass http://tfs_backend; # 兜底:如果TFS还是返回HTTP重定向,自动替换为HTTPS proxy_redirect http:// https://; # 配合upstream的keepalive提升连接效率 proxy_http_version 1.1; proxy_set_header Connection ""; } }
关键改动说明:
X-Forwarded-Proto https:这是解决循环的核心!TFS会通过这个请求头感知到外部用户是用HTTPS访问的,不会再主动触发HTTPS重定向。proxy_redirect http:// https://:如果TFS还是返回了HTTP格式的重定向地址,Nginx会自动替换成HTTPS,避免跳转回HTTP。- 补充的HTTP/1.1和连接头:配合upstream的keepalive配置,优化反向代理的连接复用效率。
后续验证步骤:
- 把你的私钥路径补全到
ssl_certificate_key字段 - 重启Nginx服务:
sudo systemctl restart nginx - 清除浏览器缓存后访问
https://tfs.domain.com,检查重定向错误是否消失
另外,因为你用的是自签名SSL证书,客户端访问时会弹出安全警告,记得让客户端信任该证书,企业环境也可以考虑用内部CA签发的证书来避免这个问题。
内容的提问来源于stack exchange,提问作者Leonid Usachov
相关产品推荐
相关产品推荐

