我正在 Azure VM 上執行 Ubuntu 伺服器 (18.04),並使用 Apache2 (2.4.29)。我有一個後端應用程式在我的網站呼叫的同一主機上的 docker 中運行。無需 SSL 即可輕鬆完成此操作。我添加了 SSL 證書,並且靜態頁面透過 https 加載良好(因此證書有效)。當我新增呼叫我的應用程式的頁面(偵聽主機連接埠 8080)時,出現錯誤:
得到https://myhost.com:8080/api/fetchService淨::ERR_SSL_PROTOCOL_ERROR
由於容器中的應用程式未設定 SSL,因此如何設定 Apache2 以在沒有 SSL 的情況下與本機容器互動?
虛擬主機配置:
<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
為其他有相同問題的人發文。我最終為反向代理創建了第二個虛擬主機。
所以 site1 -> 對於有 ssl 的 apache 網頁,
site2 -> 反向代理來終止容器服務的 ssl。然後複製 orig ssl 虛擬主機檔案並調整為新的虛擬主機 8443:
註解掉文檔根(例如#文檔根)
<Location />
Order allow,deny
Allow from all
ProxyPass http://localhost:8080/ flushpackets=on
ProxyPassReverse http://localhost:8080/
</Location>
在 ports.conf 中也新增了第二個監聽連接埠(例如 8443)並啟用了網站。 a2ensite反向ssl.conf systemctl重新啟動apache2
好啦!