Подтвердить что ты не робот

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

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

Домен с ssl - это www.mydomain.com

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

http://mydomain.com, http://www.mydomain.com и https://mydomain.com до

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 working, либо no-www to → www, но их смешивание, как указано выше, не работает.

4b9b3361

Ответ 1

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

Также не забудьте перезагрузить 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;
}

Ответ 2

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

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 для улучшения SEO.

Ответ 3

#If you like to redirect all "http" to "https" then add the following:
server {
        listen 80;

        server_name yourdomain.com;
        server_name www.yourdomain.com;

 if ($scheme = "http")
        {
                rewrite ^(.*)$ https://yourdomain.com$1 permanent;
        }
}