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);
}
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);
}
誰もがこれに精通していて、それが正しいか正しくないかを見つけることができますか?
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);
}
}
||
ステートメントとそれは動作するはずです(テストされていません):
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, ""));
}
}