httpsで構築したnodejsアプリケーションをApacheのリバースプロキシで転送する


80,443以外のポートで構築したアプリケーションをリバースプロキシで転送する

掲題のとおり、Apache 443ポートから127.0.0.1ポート3000で動作中のnodejsアプリケーションに転送する

通常、WEBアプリケーションは、80ポート、443ポートで構築するため別段リバースプロキシを必要としないが、特にPHP以外の言語で構築した場合、GoやNodejsなどは別途任意のポートで構築すると思います。
その際の80あるいは443ポートで待ち受ける際のリバースプロキシの設定がうまくいかなかったので、備忘録として残しておきます。

※参照元
https://blog.neet-shikakugets.com/construct-reverse-proxy-using-apache

まずは、ベースとなるアプリケーションの前面にたつリバースプロキシなしのSSL設定の場合


<VirtualHost *:443>
# SSL
SSLEngine on
SSLCertificateFile  /var/www/[SSL証明書へのパス]/cert.pem
SSLCertificateKeyFile  /var/www/[SSL証明書発行時の秘密鍵へのパス]/privkey.pem

</VirutalHost>

上記の設定で問題なし

これに、一般的なリバースプロキシ転送を行おうとする場合

<VirtualHost *:443>
# SSL
SSLEngine on
SSLCertificateFile  /var/www/○○○○○/cert.pem
SSLCertificateKeyFile  /var/www/○○○○/privkey.pem
# Proxy設定
ProxyRequests Off
ProxyPass / https://your-original.com:3000/
ProxyPassReverse / https://your-original.com:3000/
</VirtualHost>

※このままの設定でなかなか解決せずかなりハマってしまいました。

さて、実際には上記の設定だけでは無効で以下のようにする必要がある

<VirtualHost *:443>
# SSL
SSLEngine on
SSLProxyEngine On # <<<-この設定が必要になる
SSLCertificateFile  /var/www/○○○○/cert.pem
SSLCertificateKeyFile  /var/www/○○○○/privkey.pem
# Proxy設定
ProxyRequests Off
ProxyPass / https://your-original.com:3000/ # <<< 末尾の/は必須のようです。
ProxyPassReverse / https://your-original.com:3000/ # <<< 末尾の/は必須のようです。
</VirtualHost>

上記設定で例えば、
https://your-original.com から https://your-original.com:3000 へと転送される。