在多域Varnish上重定向HTTPS

时间:2019-05-23 08:45:05

标签: ssl https varnish bitnami

我有两个基于相同框架的域(magento2) domain1.it domain2.com

我想将它们重定向到各自的SSL版本。 https://domain1.it https://domain2.com

域1已正确配置为重定向到HTTPS,我的清漆配置文件为:

sub vcl_recv {
if ( (req.http.host ~ "^(?i)www.domain1.it" || req.http.host ~ "^(?i)domain1.it") && req.http.X-Forwarded-Proto !~ "(?i)https") {
return (synth(750, ""));
    }

sub vcl_synth {
if (resp.status == 750) {
    set resp.status = 301;
    set resp.http.Location = "https://domain1.it" + req.url;
return(deliver);
}

问题在于合成器总是重定向到相同的域。

我应该添加一个if条件,在该条件下,我可以调用重定向到domain2的https的子例程

2 个答案:

答案 0 :(得分:1)

为了热爱一切美好的事物,请停止使用超凡脱俗的状态代码,301和302效果很好,更清晰,省了一行。

我建议您不要使用x-forwarded-proto并使用支持PROXY协议的SSL / TLS终结器,但是既然您已经拥有了,就可以这样做:

sub vcl_recv {
    if (req.http.X-Forwarded-Proto !~ "https") {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

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

相关链接:https://info.varnish-software.com/blog/rewriting-urls-with-varnish-redirection

答案 1 :(得分:0)

Bitnami工程师在这里。我刚刚查看了Varnish文档,发现了这一点:

sub vcl_recv {
    if (client.ip != "127.0.0.1" && std.port(server.ip) == 80 && req.http.host ~ "^(?i)example.com") {
        set req.http.x-redir = "https://" + req.http.host + req.url;
        return(synth(850, "Moved permanently"));
    }
}

sub vcl_synth {
    if (resp.status == 850) {
        set resp.http.Location = req.http.x-redir;
        set resp.status = 302;
        return (deliver);
    }
}

当您要将客户端重定向到站点的SSL版本时,这很有用。这里有更多信息:

https://varnish-cache.org/trac/wiki/VCLExampleRedirectInVCL