Azure VM で Apache2 (2.4.29) を搭載した Ubuntu サーバー (18.04) を実行しています。サイトから呼び出される同じホスト上の docker でバックエンド アプリを実行しています。これは SSL がなくても簡単に動作します。SSL 証明書を追加し、静的ページは https 経由で正常に読み込まれます (証明書は有効です)。アプリを呼び出すページを追加すると (ホスト ポート 8080 でリッスン)、エラーが発生します。
得るhttps://myhost.com:8080/api/fetchServiceネット::ERR_SSL_PROTOCOL_ERROR
コンテナ内のアプリは SSL 用に設定されていないので、SSL なしでローカル コンテナと対話するように Apache2 を構成するにはどうすればよいでしょうか?
仮想ホスト設定:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName myhost.com
DocumentRoot /var/www/myhost.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
LoadModule ssl_module modules/mod_ssl.so
SSLProxyEngine on
ProxyPreserveHost On
ProxyPass *:8080/ http://myhost.com:8080/
ProxyPassReverse *:8080/ http://myhost.com:8080/
Header set Access-Control-Allow-Origin "*"
SSLCertificateFile /etc/letsencrypt/live/myhost.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myhost.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
答え1
同じ問題を抱えている他の人のために投稿します。結局、リバース プロキシ用に 2 番目の仮想ホストを作成しました。
つまり、site1 -> SSL を使用した Apache Web ページの場合、
site2 -> コンテナ サービスの SSL を終了するためのリバース プロキシ。次に、元の SSL 仮想ホスト ファイルをコピーし、新しい仮想ホスト 8443 に合わせて調整します。
ドキュメントルートをコメントアウトします(例:# Document Root)
<Location />
Order allow,deny
Allow from all
ProxyPass http://localhost:8080/ flushpackets=on
ProxyPassReverse http://localhost:8080/
</Location>
また、ports.confに2番目のリスニングポート(例:8443)を追加し、サイトを有効にしました。a2ensitereverse-ssl.conf systemctl restart apache2
行ってもいい!