docker - 如何设置 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 正确配置它吗?
解决方案
我个人使用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
推荐阅读
- typescript - 如何在打字稿中接受日期字符串和格式?
- javascript - Promise.any() 和 Promise.race() 有什么区别
- flutter - 跨多个小部件 Flutter 传递 Firebase 用户
- sql - 在查询中进行比较时 SQLite 崩溃
- c++ - C ++ 17 if语句与初始化程序,初始化程序分配nullptr,如何处理条件?
- c - 不能随机卡。其中一些是重复的
- python - 在python中制作一个表格,使具有相同输出的所有数字都在第2列,输出在第1列
- sql - 如何使用 T-SQL 脚本获取字符串中大于 0 的连续数的计数
- java - 在自定义模块中访问“应用程序”
- c# - WPF 网络指南