Letsencrypt nginx,更新returns一个404
Letsencrypt nginx, renew returns a 404
我在更新 letsencrypt 证书时遇到问题。
为什么我运行certbot renew --dry-run
,然后网站更新失败
返回 404。
查看下面我的 nginx 配置(jinja 模板)。 {{ ssl_challenge_dir }}
变量与我最初生成时用于 --webroot-path
的变量相同
证书。
如果我将包含虚拟内容的文件放在 {{ ssl_challenge_dir
}}/.well-known/acme-challenge/test.html
中,那么该文件将得到完美的服务
没有提出 404.
所以我有点困惑。据我了解,当 certbot 运行s 时,它会创建一个
同一目录下的临时文件,然后尝试请求它。但它
一直返回 404.
有人知道我做错了什么吗?
server_tokens off;
more_set_headers 'Server: ';
# Letsencrypt and SSL Redirect
server {
listen 80;
server_name {{ site.domain }} {{ site.name }};
# Letsencrypt challange
location /.well-known/acme-challenge/ {
root {{ site.ssl_challenge_dir }};
allow all;
try_files $uri $uri/ =404;
}
# Redirect all other requests to https
location / {
return 301 https://{{ site.name }}$request_uri;
rewrite ^/(.*) https://{{ site.name }}/ permanent;
}
}
server {
server_name {{ site.name }};
listen 443;
access_log {{ user.logs_dir }}/nginx_access.log;
error_log {{ user.logs_dir }}/nginx_error.log;
client_max_body_size 10M;
gzip on;
gzip_types text/plain image/png image/jpg;
ssl on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /etc/letsencrypt/live/{{ site.name }}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{{ site.name }}/privkey.pem;
# Resources
location ^~ /media/ {
root {{ webapp.resources_dir }};
expires 31d;
gzip_static on;
}
location ^~ /static/ {
root {{ webapp.resources_dir }};
expires 0;
gzip_static on;
}
location / {
{% if site.auth_required %}
auth_basic "Restricted";
auth_basic_user_file {{ user.home_dir }}/.htpasswd;
{% endif %}
proxy_pass http://unix:{{ webapp.socket }}:;
# proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Protocol ssl;
}
}
好的,所以我发现我做错了什么。我的 nginx 配置没有问题。
我的问题是我在 运行ning certbot 获取原始证书时使用了 --webroot
,基本上只是没有意识到更新命令也需要 运行 --webroot
我在更新 letsencrypt 证书时遇到问题。
为什么我运行certbot renew --dry-run
,然后网站更新失败
返回 404。
查看下面我的 nginx 配置(jinja 模板)。 {{ ssl_challenge_dir }}
变量与我最初生成时用于 --webroot-path
的变量相同
证书。
如果我将包含虚拟内容的文件放在 {{ ssl_challenge_dir
}}/.well-known/acme-challenge/test.html
中,那么该文件将得到完美的服务
没有提出 404.
所以我有点困惑。据我了解,当 certbot 运行s 时,它会创建一个 同一目录下的临时文件,然后尝试请求它。但它 一直返回 404.
有人知道我做错了什么吗?
server_tokens off;
more_set_headers 'Server: ';
# Letsencrypt and SSL Redirect
server {
listen 80;
server_name {{ site.domain }} {{ site.name }};
# Letsencrypt challange
location /.well-known/acme-challenge/ {
root {{ site.ssl_challenge_dir }};
allow all;
try_files $uri $uri/ =404;
}
# Redirect all other requests to https
location / {
return 301 https://{{ site.name }}$request_uri;
rewrite ^/(.*) https://{{ site.name }}/ permanent;
}
}
server {
server_name {{ site.name }};
listen 443;
access_log {{ user.logs_dir }}/nginx_access.log;
error_log {{ user.logs_dir }}/nginx_error.log;
client_max_body_size 10M;
gzip on;
gzip_types text/plain image/png image/jpg;
ssl on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /etc/letsencrypt/live/{{ site.name }}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{{ site.name }}/privkey.pem;
# Resources
location ^~ /media/ {
root {{ webapp.resources_dir }};
expires 31d;
gzip_static on;
}
location ^~ /static/ {
root {{ webapp.resources_dir }};
expires 0;
gzip_static on;
}
location / {
{% if site.auth_required %}
auth_basic "Restricted";
auth_basic_user_file {{ user.home_dir }}/.htpasswd;
{% endif %}
proxy_pass http://unix:{{ webapp.socket }}:;
# proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Protocol ssl;
}
}
好的,所以我发现我做错了什么。我的 nginx 配置没有问题。
我的问题是我在 运行ning certbot 获取原始证书时使用了 --webroot
,基本上只是没有意识到更新命令也需要 运行 --webroot