You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache终止SSL时HTTP转HTTPS重定向异常求助(含Varnish配置)

解决方案:HTTP到HTTPS重定向异常与循环问题修复

问题根源

  1. VCL配置逻辑失效:原VCL通过判断server.ip的端口是否为443触发重定向,但当前Varnish仅监听80端口,该条件永远不成立,导致HTTP请求无法触发重定向。
  2. Apache配置引发循环:SSL虚拟主机中配置的ProxyPass / http://127.0.0.1:80/会将HTTPS请求转发回Varnish的80端口,形成「Varnish重定向→Apache转发→Varnish重定向」的死循环。

步骤1:修正Varnish VCL配置

替换原VCL内容为以下逻辑,直接针对HTTP请求触发HTTPS重定向:

sub vcl_recv {
    # 拦截所有HTTP请求,重定向到HTTPS
    if (req.http.X-Forwarded-Proto != "https") {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }

    # 确保后端Apache能识别请求协议
    if (!req.http.X-Forwarded-Proto) {
        set req.http.X-Forwarded-Proto = "https";
    }
}

sub vcl_synth {
    if (resp.status == 301 || resp.status == 302) {
        set resp.http.location = req.http.location;
        return(deliver);
    }
}

步骤2:修复Apache SSL配置

删除SSL虚拟主机末尾的以下错误配置,终止循环:

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"

额外说明

若需要Varnish缓存HTTPS请求的响应,需调整架构为:

  • 用户HTTPS请求→Apache 443(终止SSL)→转发到Varnish的缓存端口(如6082)
  • Varnish将缓存后的响应返回给Apache,再由Apache返回给用户
    但当前需求仅为Apache终止SSL并实现HTTP转HTTPS重定向,上述修正已足够解决问题。

内容的提问来源于stack exchange,提问作者Umair Suraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:27:13