使用後端 docker 應用程式在 Apache2 中設定 SSL

使用後端 docker 應用程式在 Apache2 中設定 SSL

我正在 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

好啦!

相關內容