Windows Server2016搭建HTTPS透明代理网关遇Too many redirects问题求助
解决HTTPS透明代理下的"Too many redirects"问题
看起来你遇到的核心问题是代理服务器和后端HTTP服务器之间的重定向循环——代理已经把HTTPS请求转成HTTP发给后端,但后端可能还在强制把HTTP重定向到HTTPS,一来一回就形成了无限循环。我给你整理几个关键的排查和修复步骤:
1. 先确认代理服务器的Apache模块是否启用
首先得确保XAMPP的Apache已经加载了代理和请求头相关的核心模块,打开httpd.conf文件,检查以下几行是否存在且没有被注释(前面的#要去掉):
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule headers_module modules/mod_headers.so
修改后记得重启Apache生效。
2. 修正HTTPS虚拟主机的代理配置
你的HTTPS虚拟主机需要正确传递请求上下文给后端服务器,让后端知道这个请求原本是HTTPS进来的,而不是代理转发的HTTP。修改httpd-vhosts.conf里的HTTPS虚拟主机配置:
<VirtualHost *:443> ServerName your-domain.com # 替换成你的实际域名 SSLEngine on SSLCertificateFile "C:/path/to/your/fullchain.pem" # 替换成你的证书路径 SSLCertificateKeyFile "C:/path/to/your/privkey.pem" # 替换成你的私钥路径 # 禁用正向代理,只做反向代理 ProxyRequests Off # 保留原始请求的Host头,后端服务器需要这个识别站点 ProxyPreserveHost On # 关键:告诉后端服务器请求的原始协议是HTTPS RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" # 代理到后端服务器的HTTP服务(替换成你的后端IP和端口) ProxyPass / http://192.168.x.x:80/ ProxyPassReverse / http://192.168.x.x:80/ </VirtualHost>
这里的X-Forwarded-Proto头是核心,后端服务器会通过它判断请求的真实协议。
3. 修改后端服务器的重定向规则
问题的根源往往在后端:如果后端服务器不管请求来源,只要收到HTTP请求就强制重定向到HTTPS,那代理转发的HTTP请求就会被后端踢回HTTPS,代理再接收后又转成HTTP发给后端,循环就此产生。
如果后端是Apache(比如也是XAMPP)
修改后端的.htaccess或者httpd.conf里的重定向规则,改成只在原始请求不是HTTPS的时候才重定向:
RewriteEngine On # 仅当代理传递的头显示原始协议不是HTTPS时,才重定向 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
如果后端是Nginx
修改后端的Nginx配置文件,添加类似判断逻辑:
server { listen 80; server_name your-domain.com; # 检查代理传递的头,只有原始请求不是HTTPS才重定向 if ($http_x_forwarded_proto != 'https') { return 301 https://$host$request_uri; } # 其他业务配置... }
4. 检查HTTP虚拟主机的重定向规则
你的HTTP(80端口)虚拟主机应该只做一件事:把所有HTTP请求重定向到HTTPS,不要加多余的规则,配置应该像这样:
<VirtualHost *:80> ServerName your-domain.com # 永久重定向到HTTPS Redirect permanent / https://your-domain.com/ </VirtualHost>
5. 清除浏览器缓存测试
有时候浏览器会缓存旧的重定向规则,导致即使你改了配置还是出现循环。建议用无痕模式打开浏览器,或者清除缓存后再测试。
按照上面的步骤一步步调整,应该就能解决重定向过多的问题了。
内容的提问来源于stack exchange,提问作者Ondřej Douša




