我有两个基于相同框架的域(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的子例程
答案 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版本时,这很有用。这里有更多信息: