Назад | Перейти на главную страницу

Как перенаправить все HTTP-запросы на https, не нарушая letsencrypt с помощью nginx

Я использую 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?

Моя рабочая конфигурация для этого:

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 управляется Ansible и содержит:

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