我使用 Nginx 作为 Rstudio 服务器和 Shiny 服务器的反向代理,以保护与这些服务的连接。我使用 Letencrypt 获取免费签名证书。
我有这个 letsencrypt 条目来验证我的身份。
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name mydomain.com;
location ~ /.well-known {
allow all;
}
}
我还有另一个server
监听 443 和proxy_redirect
我的服务器。那里一切都正常。我想要做的是
server {
listen 80;
return 301 https://$host$request_uri;
}
但我认为这会破坏 letsencrypt,那么如何在不破坏 letsencrypt 验证的情况下实现上述操作?
答案1
我的工作配置是:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /srv/www/empty;
include includes/letsencrypt;
location / {
return 301 https://www.example.com$request_uri;
}
}
Ansible在哪里/etc/nginx/includes/letsencrypt
管理并包含:
location /.well-known/acme-challenge/ {
try_files $uri =404;
}
并且/srv/www/empty
是一个空目录,只有在使用 Let's Encrypt 发出挑战(使用--webroot
)时才包含文件。
然后使用以下命令运行 Let's Encrypt:
letsencrypt certonly --webroot -w /srv/www/empty -d example.com -d www.example.com