如何在光油中强制执行SSL

我打算使用Varnish将客户端redirect到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); } 

在Varnish版本3和4之间,vcl需求发生了变化,这些可以在varnish文档中find: https ://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#changes-to -vcl 。

我尝试在redirect的Varnish 4版本中导致redirect循环。 我不完全确定,如果这是不正确的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); } 

有没有人熟悉这一点,并能够发现,如果是正确的或不正确的?

在更新顶级域名(TLD)时,请尝试使用以下各项来清除第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); } } 

你应该能保持|| 声明,它应该工作(未testing):

 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, "")); } }