Varnish
Apache
HTTPS
hitch

Hitch・Varnish・Apache2でのhttps通信

More than 1 year has passed since last update.

現在のVarnishはSSL/TLSに対応していませんが、Hitchを用いることで、https通信を可能にすることができます。

今回はLetsEncryptでの証明書発行からVarnishを用いた、https通信の設定方法を解説していきたいと思います。

流れ

  1. LetsEncryptでの証明書発行
  2. Hitchの設定
  3. Varnishの設定
  4. Apache2の設定
  5. まとめ

1.LetsEncryptでの証明書発行

LetsEncryptのインストール

\$git clone https://github.com/letsencrypt/letsencrypt.git

\$cd letsencrypt

\$./letsencrypt-auto --help

\$./letsencrypt-auto certonly -a standalone -d example.com

DB鍵交換用パラメーター作成

\$openssl dhparam 2048 -out dhparam.pem

後にHitchの設定で使用する認証鍵の作成
\$sudo cat /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/fullchain.pem dhparam.pem > /etc/letsencrypt/live/example.com/hitch-bundle.pem

2.Hitchの設定

\$sudo apt-get install hitch

/etc/hitch/hitch.conf

frontend = "[*]:443"
ciphers = "ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:EECDH+HIGH:EDH+HIGH:HIGH:+3DES:!RC4:!MD5:!aNULL:!eNULL:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5:!DH"
backend = "[127.0.0.1]:81"  
write-proxy-v2 = on
workers = 2
backlog = 1024
keepalive = 3600
syslog = on
user = "nobody"
pem-file = "/etc/letsencrypt/live/a/hitch-bundle.pem"
daemon = on

・Hitchは443ポートで待ち受け、81ポートで待ち構えるVarnishに繋ぎます。
・pem-fileには、先ほど作成した認証鍵を指定します。
/etc/systemd/system/hitch.service

[Unit]
Description=Hitch TLS unwrapping daemon
After=network.target
Documentation=https://github.com/varnish/hitch/tree/master/docs man:hitch(8)

[Service]
ExecStart=/opt/hitch/sbin/hitch --user _hitch --group _hitch --config /etc/hitch/hitch.conf --quiet
ExecReload=/bin/kill -HUP $MAINPID
Type=forking
Restart=on-failure
PrivateDevices=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=multi-user.target

3.Varnishの設定

アクセスを8080ポートで待ち受けるApacheに流すようにVarnishを設定します。
/etc/varnish/default.vcl

backend default {
.host = "127.0.0.1";
.port = "8080";
}

/etc/systemd/system/varnish.service

[Service]
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -a :81 ,PROXY -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,512m

\$sudo systemctl daemon-reload
\$sudo systemctl restart varnish.service

4.Apache2の設定

/etc/apache2/ports.conf

Listen 127.0.0.1:8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Apache2は8080portを開放して、Varnishから飛んでくるアクセスを待ちます。

5.まとめ

それぞれのサービスが死んでいないか一度確認しておくことをオススメします。
\$ps aux | grep -e hitch -e varnish -e apache2
各々のサービスの生存確認ができましたら、ブラウザから実際にアクセスして、https通信になっているのか確認してみましょう。