如何将所有http请求转发到https,而不用使用nginx打开letsencrypt

我使用Nginx作为Rstudio服务器和Shiny服务器的反向代理,用于保护与这些服务的连接。 我正在使用Letencrypt免费签名的证书。

我有这个条目让letsencrypt来validation我是谁我说我是谁。

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,所以我怎么有以上没有打破letsencryptvalidation?

我的工作configuration是:

 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; } } 

其中/etc/nginx/includes/letsencrypt是Ansiblepipe理的,包含:

 location /.well-known/acme-challenge/ { try_files $uri =404; } 

/srv/www/empty是一个空的目录,只有当使用Let's Encrypt发出挑战(使用--webroot )时,它才包含文件。

让我们encryption然后运行:

 letsencrypt certonly --webroot -w /srv/www/empty -d example.com -d www.example.com