配置Nginx回复http://my-domain.com/.well-known/acme-challenge/XXXX

fbcarpbf  于 2023-10-17  发布在  Nginx
关注(0)|答案(3)|浏览(304)

我无法让nginx返回我放在/var/www/letsencrypt中的文件。

nginx/sites-available/mydomain.conf

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server ipv6only=on;
  4. server_name my-real-domain.com;
  5. include /etc/nginx/snippets/letsencrypt.conf;
  6. root /var/www/mydomain;
  7. index index.html;
  8. location / {
  9. try_files $uri $uri/ =404;
  10. }
  11. }

nginx/snippets/letsencrypt.conf

  1. location ^~ /.well-known/acme-challenge/ {
  2. default_type "text/plain";
  3. root /var/www/letsencrypt;
  4. }

我运行这个命令:certbot certonly --webroot -w /var/www/letsencrypt/ -d my-real-domain.com
但是certbot试图访问的页面总是404。

调试中

  1. $ echo hi > /var/www/letsencrypt/hi
  2. $ chmod 644 /var/www/letsencrypt/hi

现在我应该能够curl localhost/.well-known/acme-challenge/hi,但这不起作用。还是404知道我漏掉了什么吗

nwo49xxi

nwo49xxi1#

选项root /var/www/letsencrypt/;告诉nginx“这是基本目录”,因此最终路径将是/var/www/letsencrypt/.well-known/acme-challenge/
所以,你有两个选择:
1.改变你的路径,例如,

  1. $ echo hi > /var/www/letsencrypt/.well-known/acme-challenge/hi

1.更改nginx的行为,这样nginx会将其视为别名:

  1. location ^~ /.well-known/acme-challenge/ {
  2. default_type "text/plain";
  3. rewrite /.well-known/acme-challenge/(.*) /$1 break;
  4. root /var/www/letsencrypt;
  5. }

不要忘记make killall -1 nginx to reload config

5gfr0r5j

5gfr0r5j2#

看来Synology Nginx配置现在有了一个针对acme-challenge的规则。把你的文件放在/var/lib/letsencrypt/.well-known/acme-challenge中,不需要重新加载Nginx,因为配置保持不变。
详情请参见/etc/nginx/nginx.conf

gopyfrb3

gopyfrb33#

这是因为你使用root而不是别名,我有这个作为工作解决方案:

  1. listen 80;
  2. location /.well-known/acme-challenge {
  3. alias /var/www/acme;
  4. }
  5. location / {
  6. return 301 https://$host$request_uri;
  7. }

相关问题