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, но их смешивание, как указано выше, не работает.
Ответы
Ответ 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;
}
}