Varnishキャッシュソフトウェアは、デフォルトではSSL/TLSをサポートしていません。 VarnishでSSL/TLSサポートを有効にするには、追加のソフトウェアが必要です。
SSL終了 VarnishでSSL/TLSを有効にする方法です。 Hitch、Nginx、またはApacheを使用できます VarnishHTTPアクセラレータのSSLターミネーションを有効にします。
SSLターミネーションソフトウェアはHTTPSで実行されます ポート'443 'およびクライアントからのすべてのHTTPS要求を処理します。その後、すべてのリクエストはワニスキャッシュソフトウェアに転送され、次にオリジンバックエンドサーバーに転送されます。
この記事では、NginxWebサーバーを使用してVarnishSSLターミネーションを設定する方法を学習します。
始める前に、次の要件が整っていることを確認してください。
- VarnishがインストールされたLinuxサーバー。
- root権限
- ドメイン名
この例では、VarnishがインストールされたRockyLinuxサーバーを使用しています。そして、ドメイン名' example.ioを使用します '。
それでは始めましょう。
NginxWebサーバーのインストール
NginxをVarnishバックエンドとして使用している場合は、この最初の手順をスキップしてください。
この最初のステップでは、LinuxシステムにNginxをインストールします。
1. Debian / Ubuntuベースのディストリビューションの場合、以下のaptコマンドを実行してNginxWebサーバーをインストールします。
sudo apt install nginx -y
2. CentOS / RockyLinux / AlmaLinuxオペレーティングシステムの場合、以下のDNFコマンドを実行してNginxWebサーバーをインストールします。
sudo dnf install nginx -y
3. Nginxのインストールが完了したら、次のコマンドを使用してNginxWebサーバーを起動して有効にします。
sudo systemctl enable --now nginx
エラーが発生した場合は、そのままにしておきます。次のステップでNginxを構成します。
Certbotを使用してSSLを生成
このステップでは、cerbotツールをインストールし、Letsencryptからドメイン' example.ioのSSL証明書を生成します。 '。
1.まず、HTTPポートとHTTPSポートをシステムファイアウォールに追加します。
Debian / Ubuntuシステムの場合、以下のufwコマンドを実行して、HTTPおよびHTTPSポートを開きます。
sudo ufw allow http
sudo ufw allow https
sudo ufw reload
CentOS / RockyLinux / AlmaLinuxシステムの場合、以下のfirewall-cmdコマンドを実行します。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
2.次に、次のコマンドを使用してcertbotツールをインストールします。
以下のaptコマンドを使用して、Debian/Ubuntuシステムにcertbotツールをインストールします。
sudo apt install certbot -y
以下のDNFコマンドを使用して、CentOS / RockyLinux/AlmaLinuxシステムにcertbotツールをインストールします。
sudo dnf install certbot -y
3. SSL Letsencryptを生成する前に、デフォルトのHTTPポートで実行されているVarnishサービスを停止します。
sudo systemctl stop varnish
sudo systemctl stop nginx
4.次に、以下のcertbotコマンドを実行して、SSLLetsencryptを生成します。また、ドメイン名とメールアドレスを必ず変更してください。
sudo certbot certonly --agree-tos --email [email protected] --standalone --preferred-challenges http -d example.io
certbotプロセスが完了すると、証明書はディレクトリ' /etc/letsencrypt/live/DOMAIN.COM/で利用できるようになります。 '。
証明書'fullchain.pem 'はSSL公開鍵であり、' privkey.pem 'はSSL秘密鍵です。
VarnishHTTPアクセラレータのバックエンドとしてNginxWebサーバーを使用している場合は、この手順をスキップしてください。
別のバックエンドWebサーバーを使用している場合は、Nginxのデフォルトポートを構成する必要があります。
1.nanoエディターを使用してデフォルトのnginx構成を編集します。
sudo nano /etc/nginx/nginx.conf
デフォルトの'サーバー{...} 'セクションで、オプションを変更します' listen 'ポート'8081 '以下のように。
....
server {
listen 8081 default_server;
listen [::]:8081 default_server;
...trim...
}
....
構成を保存して終了します。
2.ここで、Nginxサービスを再起動して、新しい構成を適用します。
sudo systemctl restart nginx
デフォルトのNginxサービスがポート'8081で実行されています '。
NginxWebサーバーを使用したSSLターミネーションのセットアップ
NginxでSSLターミネーションを設定するには、HTTPSポート「443」で実行される新しい仮想ホスト/サーバーブロック構成を作成する必要があります。
この仮想ホストは、クライアントからのすべてのHTTPSリクエストを処理し、すべてのリクエストをVarnishHTTPアクセラレータに転送します。
1.次のコマンドを使用して、新しいNginxサーバーブロック構成を作成します。
Debian / Ubuntuベースのシステムを使用している場合は、新しい構成を作成します' /etc/nginx/sites-available/example.io '。
sudo nano /etc/nginx/sites-available/example.io
CentOS / RockyLinux / AlmaLinuxシステムの場合、新しい構成を作成します' /etc/nginx/conf.d/example.conf' 。
sudo nano /etc/nginx/conf.d/example.conf
次の構成をコピーして貼り付けます。また、SSL証明書のドメイン名とパスを必ず変更してください。
server {
listen 443 ssl http2;
server_name example.io;
ssl_certificate /etc/letsencrypt/live/exmaple.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/example.io_access.log;
error_log /var/log/nginx/example.io_error.log;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
}
構成を保存して終了します。
2.次に、Debian / Ubuntuシステムの場合、次のコマンドを使用してサーバーブロック構成をアクティブ化します。
sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/
3.次に、次のコマンドを実行してNginx構成を確認してから、Nginxサービスを再起動して新しい構成を適用します。
sudo nginx -t
sudo systemctl restart nginx
4.次に、Nginxサービスと HTTPSを確認します ポート'443 '次のコマンドを使用します。
以下のsystemctlコマンドを使用してNginxサービスのステータスを確認します。
sudo systemctl status nginx
Nginxサービスがアクティブで実行されていることを確認してください。
HTTPSポートを確認します'443 ' ssを使用してシステム上で 以下のコマンド。
ss -antpl | grep 443
HTTPSポートを確認してください'443 '状態について'LISTEN '。
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))
これで、NginxWebサーバーを使用したSSLターミネーションの基本構成が完了しました。
このステップでは、HTTPをHTTPSプロトコルに自動的にリダイレクトするようにVarnishを設定します。これは、構成' default.vcl'に新しいワニスルールを作成することで実現できます。 。
1.ワニス構成を編集します'/etc/varnish/default.vcl' nanoエディターを使用します。
nano /etc/varnish/default.vcl
次の構成をコピーして、オプション' sub vcl_recv {...}内に貼り付けます。 '。また、ドメイン名は必ずドメインに合わせて変更してください。
sub vcl_recv {
...trim...
if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
set req.http.x-redir = "https://example.io" + req.url;
return(synth(850, ""));
}
...trim...
{
次に、次の構成を行の最後に追加します。これにより、HTTP「301」へのリダイレクト方法が決まります。
sub vcl_synth {
if (resp.status == 850) {
set resp.http.Location = req.http.x-redir;
set resp.status = 301;
return (deliver);
}
}
ニスの構成を保存して終了します。
2.次に、次のコマンドを使用して、Varnishサービスを再起動し、新しい構成を適用します。
sudo systemctl restart varnish
そして、Varnishルールを使用してHTTPおよびHTTPSの自動リダイレクトを完了しました。
Varnish SSLターミネーションをテストするには、Webブラウザまたはcurlコマンドを使用できます。
1. Webブラウザーを開き、アドレスバーにドメイン名を入力します。この例では、FirefoxWebブラウザを使用しています。
http://example.io
HTTPSプロトコルに自動的にリダイレクトされます。
Webページを右クリックして、メニューの[検査]をクリックします。 '。
タブに移動します'ネットワーク 'をクリックし、'リロードをクリックします 'ボタン。
ルートURLリクエストをクリックすると、以下のような出力が表示されます。
http://example.ioへのリクエストは、HTTPSプロトコル https://example.ioに自動的にリダイレクトされます。 ステータスコード'301 '。
Varnishサーバーはすべてのクライアント要求を処理します。
2. curlを使用したニスSSLターミネーションを確認するには、次のコマンドを使用します。
curl -I http://example.io
以下のような詳細なHTTPヘッダーが表示されます。
リクエストは、HTTPステータスコード「 301」を使用してHTTPSプロトコル「https://example.io」にリダイレクトされます。 '。ワニスサーバーは、クライアントからのすべてのリクエストを処理します。
おめでとうございます! NginxWebサーバーを使用したVarnishSSLTerminationの構成を学習しました。
また、無料のSSL Letsencryptを生成するための基本的なcertbotコマンドと、HTTPからHTTPSに自動的にリダイレクトするための基本的なニスルールについても学びました。