通过 nginx-proxy 加密 Docker 容器中的 SSL 证书

通过 nginx-proxy 加密 Docker 容器中的 SSL 证书

目前我正在使用 nginx-proxy 将我的子域路由到不同的 docker 容器。现在,我想将 SSL 证书添加到我的 Owncloud 容器,但我无法正确设置它。

我做了什么:

  1. 通过 certbot 获取证书

我尝试通过执行获取 SAN 证书,./certbot-auto certonly其中我输入了我想要使用的每个子域。证书已成功生成到etc/letsencrypt/live/www.mydomain.com

  1. 将证书挂载到 owncloud 容器并设置 nginx-proxy

快速浏览一下我的docker-compose.yml:

nginx-proxy:
  image: jwilder/nginx-proxy
  ports:
  - "80:80"
  - "443:443"
  volumes:
  - /var/run/docker.sock:/tmp/docker.sock

owncloud:
  image: owncloud
  expose:
  - 80
  - 443
  environment:
  - "VIRTUAL_HOST=owncloud.mydomain.com,www.owncloud.mydomain.com"
  - "VIRTUAL_PROTO=https"
  - "VIRTUAL_PORT=443"
  volumes:
  - "owncloud-data:/var/www/html"
  - "/etc/letsencrypt/live/www.mydomain.com:/root/ssl"

以下是我的摘录/etc/apache2/sites-available/default-ssl.conf(当然是来自 owncloud 容器的摘录)

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
            ServerAdmin webmaster@localhost

            DocumentRoot /var/www/html

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            SSLEngine on

            SSLCertificateFile      /root/ssl/cert.pem
            SSLCertificateKeyFile /root/ssl/privkey.pem
            <FilesMatch "\.(cgi|shtml|phtml|php)$">
                            SSLOptions +StdEnvVars
            </FilesMatch>
            <Directory /usr/lib/cgi-bin>
                            SSLOptions +StdEnvVars
            </Directory>

            BrowserMatch "MSIE [2-6]" \
                            nokeepalive ssl-unclean-shutdown \
                            downgrade-1.0 force-response-1.0
            # MSIE 7 and newer should be able to use keepalive
            BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    </VirtualHost>
</IfModule>

每当我尝试连接时https://www.owncloud.mydomain.com都会出现ERR_CONNECTION_REFUSED错误。

有什么想法吗?谢谢。

答案1

最后我发现我的docker-compose.yaml不正确。这是我的新配置:

nginx-proxy:
  image: jwilder/nginx-proxy
  ports:
  - "80:80"
  - "443:443"
  volumes:
  - /var/local/nginx/certs:/etc/nginx/certs
  - /etc/letsencrypt:/etc/letsencrypt
  - /var/run/docker.sock:/tmp/docker.sock

owncloud:
  image: owncloud
  expose:
  - 443
  environment:
  - "VIRTUAL_HOST=owncloud.mydomain.com,www.owncloud.mydomain.com"
  volumes:
  - "owncloud-data:/var/www/html"

我的 fullchain.pem 和 privkey.pem 的链接位于 /var/local/nginx 中

相关内容