我的目标是使用 Varnish 将客户端重定向到 SSL 版本的站点。在 Varnish 3 中,这可以通过 VCL 中的以下内容来完成:
sub vcl_recv {
if ( (req.http.host ~ "^(?i)somesite.org" || req.http.host ~ "^(?i)www.somesite.org")
&& req.http.X-Forwarded-Proto !~ "(?i)https") {
set req.http.x-Redir-Url = "https://www.somesite.org" + req.url;
error 750 req.http.x-Redir-Url;
}
}
sub vcl_error {
if (obj.status == 750) {
set obj.http.Location = obj.response;
set obj.status = 302;
return (deliver);
}
Run Code Online (Sandbox Code Playgroud)
在 Varnish 版本 3 和 4 之间,vcl 要求发生了变化,这些可以在 varnish 文档中找到:https ://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#changes-to -vcl。
我尝试使用 Varnish 4 版本的重定向导致重定向循环。我不完全确定 vcl 的这一部分是否不正确,或者即使正确的实现也适用于我当前的设置。
无论哪种方式,有一个确认有效的 ?Varnish 4 版本都会很有用。我的尝试是:
sub vcl_recv {
if ( (req.http.host ~ "^(?i)somesite.org" || req.http.host ~ "^(?i)www.somesite.org")
&& req.http.X-Forwarded-Proto !~ "(?i)https") {
set req.http.x-Redir-Url = "https://www.somesite.org" + req.url;
return (synth(750, req.http.x-Redir-Url));
}
}
sub vcl_synth {
if (resp.status == 750) {
set resp.http.Location = resp.reason;
set resp.status = 302;
return (deliver);
}
Run Code Online (Sandbox Code Playgroud)
有没有人熟悉这个并且能够发现它是正确的还是不正确的?
在使用您各自的值更新 TLD 的同时,为 Varnish 4 尝试以下操作:
sub vcl_recv {
if ( (req.http.host ~ "^(?i)www.domain.com") && 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://www.domain.com" + req.url;
return(deliver);
}
}
Run Code Online (Sandbox Code Playgroud)
您应该能够保留该||
语句并且它应该可以工作(未测试):
sub vcl_recv {
if ( (req.http.host ~ "^(?i)www.domain.com" || req.http.host ~ "^(?i)domain.com") && req.http.X-Forwarded-Proto !~ "(?i)https") {
return (synth(750, ""));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4660 次 |
最近记录: |