Перенаправление HTTP на HTTPS с WWW в Nginx

Перенаправление HTTP на HTTPS с WWW в Nginx

Я использую letsencrypt ssl. Когда я захожу на сайт с domain.com, он перенаправляется наhttps://domain.comно я хочуhttps://www.domain.com!

Я добавил www в качестве псевдонима для domain.com в панели DNS для доступа к сайту с www. Но теперь я получаю двойное перенаправление.

Первое перенаправление: domain.com на https:// domain.com, Второе перенаправление: https:// domain.com на https:// www.domain.com

Я хочу добиться этого в одном 301 редиректе. Уже пробовал несколько решений, приведенных в SF. Но это не сработало. У кого-нибудь есть идея?

решение1

Если у вас есть доступ к конфигурации nginx и ваш сертификат letsencrypt включает как domain.com, так и www.domain.com, то должно сработать что-то вроде этого:

server {
  listen 80;
  server_name www.domain.com;
  return 301 https://www.domain.com$request_uri;
}

server {
  listen 80;
  listen 443 ssl;
  server_name domain.com;
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  return 301 https://www.domain.com$request_uri;
}

server {
  listen 443 ssl;
  server_name www.domain.com;
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

  # the rest of your config
}

Я считаю, что SSL-сертификат должен включать оба домена, поскольку в случае запросов наhttps://domain.comSSL-подтверждение для domain.com происходит до срабатывания перенаправления 301.

Полагаю, вы также могли бы иметь отдельные сертификаты для каждого домена и соответствующим образом настроить пути сертификатов.

Связанный контент