Nginx перенаправляет http на https и не-www на ww

я настраиваю сервер nginx с SSL.

домен с ssl www.mydomain.com

Я хочу перенаправить все запросы от:

http://mydomain.com, http://www.mydomain.com, & https://mydomain.com to

https://www.mydomain.com

в настоящее время у меня есть следующие серверные блоки:

server{
  listen 443 ssl;
  root /www/mydomain.com/;

  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

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

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

server{
  listen ssl 443;
  server_name mydomain.com;
  return 301 https://www.mydomain.com$request_uri;
}

в настоящее время это не работает, но я не понимаю почему. Я могу получить комбинацию работы http - > https или no-www to - > www, но смешивание их, как указано выше, не работает.

2 ответов


перенаправление ssl не будет работать, если Ваш сертификат ssl не поддерживает домен, отличный от www. Конфигурация правильная, но может быть уменьшена до 1 сервера перенаправления

также не забудьте перезагрузить nginx sudo service nginx reload

server {
  listen 80;
  listen 443 ssl;
  server_name example.com;
  # add ssl settings
  return 301 https://www.example.com$request_uri;
}

Я опаздываю, но вы можете сделать вот так

server{
  listen 443 ssl;
  server_name www.mydomain.com;
  root /www/mydomain.com/;

  ssl    on;
  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

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

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

или вы можете заменить return 301 https://www.$server_name$request_uri; С rewrite ^ http://www.$server_name$request_uri? permanent;, оба будут работать.

Вам также нужно установить это в google webmaster для лучшего SEO.