web-dev-qa-db-ja.com

Varnish 4でSSLを適用する方法

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

誰もがこれに精通していて、それが正しいか正しくないかを見つけることができますか?

6
Taylor Taff

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