Varnish Cache SSL / TLSのネイティブサポートがありません およびポート443に関連付けられたその他のプロトコル 。 VarnishCacheを使用している場合 Webアプリケーションのパフォーマンスを向上させるには、 SSL / TLSと呼ばれる別のソフトウェアをインストールして構成する必要があります。 終了プロキシ、 Varnish Cacheと連携します HTTPSを有効にするには 。
ヒッチ は、 Varnish Cache用に設計された無料のオープンソースのlibevベースのスケーラブルなSSL/TLSプロキシです。 、現在Linux、OpenBSD、FreeBSD、およびMacOSXで動作します。ポート443でリッスンすることでTLS/SSL接続を終了します ( HTTPSのデフォルトポート 接続)、暗号化されていないトラフィックを Varnish Cacheに転送します ただし、他のバックエンドでも機能するはずです。
TLS1.2をサポートします およびTLS1.3 およびレガシーTLS1.0 / 1.1 、 ALPNをサポート (アプリケーション層プロトコルネゴシエーション )および NPN (次のプロトコルネゴシエーション ) HTTP / 2の場合 、クライアントIP /ポートをバックエンドに通知するPROXYプロトコル、オリジンへのUNIXドメインソケット接続、 SNI (サーバー名の表示 )、ワイルドカード証明書がある場合とない場合。さらに、最大 15,000を必要とする大規模なインストールに適しています リスニングソケットと500,000 証明書。
Varnish Cacheのインストールに関する以前の2つの記事の続きとして Nginxの場合 およびApache HTTPサーバー、このガイドは HTTPSを有効にすることを示しています Varnish Cache の場合 ヒッチTLSプロキシを使用する CentOS / RHEL 8 。
セットアップの論理図
このガイドは、ワニスがインストールされていることを前提としています。 Nginxの場合 またはApache Webサーバー、それ以外の場合は、以下を参照してください:
- CentOS /RHEL8にNginxWebサーバー用のVarnishCache6をインストールする方法
- CentOS /RHEL8にApacheWebサーバー用のVarnishCache6をインストールする方法
ステップ1:CentOS /RHEL8にHitchをインストールする
1。 ヒッチ パッケージはEPELで提供されます (EnterpriseLinux用の追加パッケージ )リポジトリ。インストールするには、最初に EPELを有効にします システムにインストールしてから、パッケージをインストールします。 OpenSSLをお持ちでない場合 パッケージがインストールされている場合は、それもインストールします。
# dnf install epel-release # dnf install hitch openssl
CentOS8にHitchをインストールする
2。 パッケージのインストールが完了したら、 Varnish Cacheを構成する必要があります 働くためにヒッチ 。 ヒッチも設定する必要があります SSL / TLSを使用するには 証明書とニス バックエンドとして 。 Hitchのメイン設定ファイルは/etc/hitch/hitch.confにあります。 、これについては以下で説明します。
ステップ2:ヒッチ用のVarnishキャッシュの構成
3。 次に、ニスを有効にします 追加のポートをリッスンする( 8443 この場合) PROXYを使用します ヒッチとの通信用のプロトコルサポート 。
したがって、Varnish systemdを開きます 編集用のサービスファイル。
# systemctl edit --full varnish
ExecStartの行を探します さらに-a
を追加します 値が127.0.0.1:8443、proxyのフラグ 。 127.0.0.1:8443の値を使用する つまり、Varnishは内部接続(同じサーバーで実行されているプロセス、この場合はヒッチから)のみを受け入れ、外部接続は受け入れません。
ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m
ワニスリッスンポートをヒッチに設定
ファイルを保存してから、Varnishサービスを再起動して、最新の変更を適用します。
# systemctl restart varnish
ステップ3:SSL/TLS証明書を取得する
4。 このセクションでは、 SSL / TLSを作成する方法について説明します。 ヒッチで使用される証明書バンドル 。このガイドでは、自己署名証明書、商用証明書、または Let’s Encryptの証明書を使用するさまざまなオプションについて説明します。 。
自己署名証明書(ローカルのテスト環境でのみ使用する必要があります)を作成するには、 OpenSSLを使用できます。 ツール。
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tecmint.lan.key -out tecmint.lan.crt
次に、次のように証明書とキーのバンドルを作成します。
# cat tecmint.crt tecmint.key >tecmint.pem
<強い色:赤;">注 :本番環境で使用する場合は、商用の認証局から証明書を購入できます。 ( CA )または、 Let’s Encryptから無料の自動化された完全に認識された証明書を取得します 。次に、PEMバンドルを作成します。
商用のCAから証明書を購入した場合 、図のように、秘密鍵、証明書、およびCAバンドルをマージする必要があります。
# cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem
暗号化しましょう 、証明書、秘密鍵、および完全なチェーンは、 /etc/letsencrypt/live/example.com/に保存されます。 、したがって、図のようにバンドルを作成します。
# cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem
ステップ4:ヒッチの構成と開始
5。 次に、ニスを設定します ヒッチのバックエンドとして SSL / TLSを指定します HTTPSに使用する証明書ファイル 、ヒッチ メインの構成ファイルを開いて編集します。
# vi /etc/hitch/hitch.conf
フロントエンド セクションはIPアドレスとポートを定義します ヒッチは耳を傾けます。デフォルトの構成では、すべての IPv4をリッスンします およびIPv6 サーバーに接続され、ポート 443で実行されるインターフェイス 着信するHTTPSを処理します リクエスト、ニスに渡します 。
デフォルトのバックエンドを変更します 6086からのプロキシポート 8443へ (リクエストをワニスに転送するために使用されるポート )ヒッチ バックエンドを使用した構成ファイル パラメータ。また、 pem-fileを使用して証明書ファイルを指定します 示されているパラメータ。
backend = "[127.0.0.1]:8443" #pem-dir = "/etc/pki/tls/private" pem-file = "/etc/ssl/tecmint.lan/tecmint.pem">
ワニスのSSL/TLSプロキシとしてヒッチを構成する
ファイルを保存して閉じます。
6。 次に、ヒッチを開始します サービスを提供し、システムの起動時に自動的に開始できるようにします。 --now
に注意してください enableとともに使用すると切り替え、systemdサービスも開始し、ステータスをチェックして、次のように稼働しているかどうかを確認します。
# systemctl enable --now hitch # systemctl status hitch
ヒッチステータスの確認
7。 Webサイト/アプリケーションがHTTPSで実行されているかどうかのテストに進む前に 、 HTTPSを許可する必要があります ファイアウォールのサービスポート443を使用して、サーバー上のそのポート宛てのリクエストがファイアウォールを通過できるようにします。
# firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
ステップ5:VarnishCache-Hitchセットアップを使用したSSL/TLSターミネーションのテスト
8。 次に、 Varnish Cache-Hitchをテストします。 設定。ウェブブラウザを開き、ドメインまたはサーバーのIPを使用して HTTPSをナビゲートします 。
https://www.example.com OR https://SERVER_IP/
Webアプリケーションのインデックスページが読み込まれたら、 HTTPを確認します コンテンツがVarnishCacheを介して提供されていることを確認するヘッダー 。
これを行うには、読み込まれたWebページを右クリックし、[検査]を選択します。 オプションのリストから開発者ツールを開きます。次に、ネットワークをクリックします タブ、およびリロード 次のスクリーンショットで強調表示されているように、ページを選択してから、HTTPヘッダーを表示するリクエストを選択します。
VarnishCacheでのHTTPS設定を確認してください
ステップ6:VarnishCacheでHTTPをHTTPSにリダイレクトする
9。 HTTPSでWebサイトを実行するには のみ、すべての HTTPをリダイレクトする必要があります HTTPSへのトラフィック 。これを行うには、Hitch構成ファイルに次の構成を追加します。
# vi /etc/hitch/hitch.conf
まず、 import std;という行を追加します vlc 4.0;のすぐ下 、次に vlc_recvを探します サブルーチン。VarnishCacheの直後に実行される最初のVCLサブルーチンです。 クライアントリクエストを基本的なデータ構造に解析しました。ここで、リクエストヘッダーを変更し、シンセを実行してクライアントリクエストをリダイレクトできます。
このように変更します。
sub vcl_recv { if (std.port(server.ip) != 443) { set req.http.location = "https://" + req.http.host + req.url; return(synth(301)); } }
プロキシに注意してください プロトコルはワニスを有効にします ヒッチのを見る リスニングポート443 server.ipから 変数。したがって、行 std.port(server.ip) クライアント接続を受信したポート番号を返します。
ポートが443でない場合 HTTPSの場合 ((std.port(server.ip)!=443)によってチェックされます )、サブルーチンはリクエストHTTPロケーションヘッダーを設定します( set req.http.location )安全なリクエスト(「 https:// 」+req.http.host + req.url )単に HTTPSをロードするようにWebブラウザに要求します Webページのバージョン(つまり、URLリダイレクト)。
場所 ヘッダーはvcl_synthに送信されます サブルーチン( return(synth(301))を使用して呼び出されます )HTTPステータスコードが 301 (恒久的に移動 。
10。 次に、次のvcl_synthサブルーチンを追加します (その多くのユースケースの1つは、ユーザーのリダイレクトです)、上記のシンセを処理します。
sub vcl_synth { if (resp.status == 301) { set resp.http.location = req.http.location; set resp.status = 301; return (deliver); } }
応答ステータスが301であるかどうかを確認します 、応答のHTTP Locationヘッダーは、リクエストのHTTP Locationヘッダーに設定されます。これは、実際にはHTTPSへのリダイレクトであり、配信アクションを実行します。
配信アクションは、バックエンドからの応答を使用して応答を作成し、その応答をキャッシュに保存して、クライアントに送信します。
HTTPをHTTPSにリダイレクトするようにヒッチを構成する
ファイルを保存して閉じます。
11。 もう一度、サービスを再起動して、Varnish構成に新しい変更を適用します。次に、curlコマンドラインツールを使用して、 HTTPからのリダイレクトを確認します。 HTTPS 。
# systemctl restart varnish # curl -I http://eaxmple.com/
HTTPからHTTPSへのリダイレクトを確認してください
ブラウザからの応答も、次のスクリーンショットに示されているものと同じです。
ブラウザでHTTPからHTTPSへのリダイレクトを確認する
この時点まで、すべてが正常に機能していることを願っています。そうでない場合は、下のフィードバックフォームからコメントや質問をドロップしてください。高度な構成オプションについては、VarnishCacheのドキュメントとHitchのドキュメントを参照してください。
共有は思いやりがあります…Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する