使用后端 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/fetchServicenet::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。然后复制原始 SSL 虚拟主机文件并调整为新虚拟主机 8443:

注释掉 Document Root(例如 #Document Root)

<Location />
    Order allow,deny
    Allow from all
    ProxyPass http://localhost:8080/ flushpackets=on
    ProxyPassReverse http://localhost:8080/ 
</Location>

还在 ports.conf 中添加了第二个监听端口(例如 8443)并启用了站点。a2ensite reverse-ssl.conf systemctl restart apache2

一切准备就绪!

相关内容