首页 > 解决方案 > 如何设置 docker nextcloud 以使用 SSL

问题描述

我已经成功安装并在 docker 中运行 Nextcloud。安装使用 LetsEncrypt 生成证书,当我使用 HTTP 访问它时运行没有问题。

但是,当我尝试使用 HTTPS 时,我收到 500 Internal Server Error。

研究这个问题,我了解到默认情况下,nginx 代理容器实际上并未配置为使用 HTTPS(基于我在网上阅读的各种 nextcloud 描述)。显然,必须做的是将其配置为能够使用 SSL。

麻烦的是,没有给出执行此操作的分步程序。

几乎在我所见的任何地方,我都能找到很多教程和说明,包括“设置letsencrypt”或“使用certbot或其他方法放置证书。这很好,但我使用的docker-compose.yml文件已经设置了证书!我需要的是一些关于如何配置 nginx-proxy 以使用 SSL 的明确说明。我一直找不到这样的说明。

有人可以告诉我如何正确配置 nginx-proxy 容器以使用 SSL 吗?或者如果失败了,有人可以指出一些明确的说明,以便为 SSL 正确配置它吗?

标签: dockersslnextcloud

解决方案


我个人使用https://github.com/nginx-proxy/nginx-proxy容器来做到这一点。

这是我用来启动反向代理容器的命令:

docker run --detach \
  --name reverse-proxy \
  --net network-proxy \
  --publish 80:80 --publish 443:443 \
  --volume <CERT_FOLDER_ON_HOST>:/etc/nginx/certs:ro \
  --volume /var/run/docker.sock:/tmp/docker.sock:ro \
  nginxproxy/nginx-proxy

下面的行将容器设置在与其他容器相同的网络中。

  --net network-proxy \

下面的行告诉代理它可以在哪里找到您的域的证书。

  --volume <CERT_FOLDER_ON_HOST>:/etc/nginx/certs:ro \

您必须将证书放在该文件夹中,才能生成证书,您可以使用https://certbot.eff.org/。证书必须像这样命名:example.com.key用于私钥,example.com.crt用于证书。

如果您需要帮助:https ://github.com/nginx-proxy/nginx-proxy和https://certbot.eff.org/

下面的行允许容器之间的通信,以便代理能够重定向请求。

  --volume /var/run/docker.sock:/tmp/docker.sock:ro \

之后,您必须在其他容器中设置 VIRTUAL_HOST 环境变量,以将其他容器的域名告诉反向代理。

一个网络服务器容器的例子:

docker run --detach \
  --name webserver \
  --net network-proxy \
  --env 'VIRTUAL_HOST=<DOMAIN_NAME>' \
  --volume <WEBSITE_FOLDER_ON_HOST>:/usr/share/nginx/html:ro \
  nginx

推荐阅读