如何设置 docker nextcloud 以使用 SSL

How to setup docker nextcloud to use SSL

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

但是,当我尝试使用 HTTPS 时,出现 500 内部服务器错误。

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

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

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

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

我个人使用 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-proxyhttps://certbot.eff.org/

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

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

之后你必须在others容器中设置VIRTUAL_HOST环境变量来将others容器的域名告诉反向代理。

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

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

虽然上面给出的答案 y Alexandre 是一个很好的答案(我给了它一个努力点并且它确实有效),但我最终通过编写自己的反向代理服务器解决了我的问题。该服务器专为 Nextcloud 设计,在 Docker 容器中运行良好。它需要很少的配置,并且比 nginx 代理更容易设置和使用。它与 SSL 一起工作,并作为 Nextclud 的一个很好的安全层。

使用各种框架很容易制作反向代理。一旦我决定走那条路,就花了不到三个小时的时间为 Nextcloud 制作了这条路。

如果有兴趣,我很乐意分享代码和容器。