gpt4 book ai didi

docker - letsencrypt webroot为位于docker中的nginx提供404

转载 作者:行者123 更新时间:2023-12-02 19:35:00 24 4
gpt4 key购买 nike

我有一个以以下方式运行的简单docker容器:

docker service create --name nginx_proxy \
--mount type=bind,source=/opt/nginx/conf.d,target=/etc/nginx/conf.d \
--mount type=bind,source=/opt/nginx/webroot,target=/var/webroot \
--constraint 'node.role==manager' \
--publish 80:80 --publish 443:443 \
--network nginx-net \
nginx

创建的服务运行没有问题。我添加了一个示例配置,该配置将代理传递给同一网络中的另一个服务(example.com.conf):
server {
listen 80;
server_name example.com www.example.com;
location /.well-known/acme-challenge {
alias /var/webroot;
}

location / {
proxy_pass http://example_site:8080;
}
}

当我访问(www。)example.com时,可以看到我的网站。

由于我将主机:/ opt / nginx / webroot安装到容器:/ var / webroot,因此我在/ opt / nginx / webroot中创建了一个名为“test.html”的文件(文件的内容无关紧要)。

当我打开浏览器并输入时:
http://example.com/.well-known/acme-challenge/test.html

我可以查看添加到/ opt / nginx / webroot的文件。但是,当我运行以下命令时,certbot会抛出404:
certbot certonly --dry-run --webroot -w /opt/nginx/webroot -d example.com -d www.example.com

我在这里想念什么?据我了解,certbot在webroot目录中创建了一个文件,并尝试公开下载该文件;但是,由于某种原因,它看不到我的文件。

最佳答案

我相信您的问题可能是由于certbot命令中的-w误解造成的。
-w或--webroot-path指定包含Web服务器提供的文件的顶级目录。

Certbot将针对acme挑战为此创建子文件夹,在您的情况下,certbot将创建/opt/nginx/webroot/.well-known/acme-challenge/,但您的nginx配置指向webroot本身。

https://certbot.eff.org/docs/using.html#webroot

考虑改变

  location /.well-known/acme-challenge {
alias /var/webroot;
}

像这样
  location /.well-known/acme-challenge {
alias /var/webroot/.well-known/acme-challenge;
}

关于docker - letsencrypt webroot为位于docker中的nginx提供404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com