DockerコンテナのWEBサーバーではTLS証明書管理を不要にする

サーバー
スポンサーリンク

Apacheで立てたWEBサーバーへHTTPSアクセスをさせ、そのアクセスをWEBサーバー内のDockerコンテナのWEBサーバーへ転送することで、DockerコンテナのWEBサーバーでTLS証明書管理を不要にする設定方法です。

ここでは例として、ホストの 60443番ポートへのHTTPSアクセスで、ホストの 127.0.0.1:50443番を通してDockerコンテナ内の 80番へ転送する設定です。

ホストのApache でリバースプロキシとSSL設定を行います。
RockyLinuxでは /etc/httpd/conf.d/下に confファイルを次の内容で作成します。
SSLCertificateFile,SSLCertificateKeyFile,SSLCertificateChainFile は各自の環境のものを設定してください。

Listen 60443

<VirtualHost *:60443>

    RequestHeader set X-Forwarded-Proto "https"

    ProxyPreserveHost On
    ProxyPass        / http://127.0.0.1:50443/
    ProxyPassReverse / http://127.0.0.1:50443/

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

</VirtualHost>

Docker では docker run の -pオプションを次のようにしておきます。

-p 127.0.0.1:50443:80

これで、https://example.com:60443 のようにホストへHTTPS接続すると、Docker内のWEBサーバーに接続できます。またTLS証明書はホストで管理すれば良く、Docker内のWEBサーバーでは管理不要です。

コメント