Этот вопрос является точной копией следующего:
I Я пытаюсь перенаправить https://domain.ltd
на https://www.domain.ltd
на Nginx (обратите внимание на www), вот конфигурация:
server {
listen 80;
server_name domain.ltd;
return 301 https://www.$host$request_uri;
}
server {
listen 443;
server_name domain.ltd;
return 301 https://www.$host$request_uri;
}
server {
listen 443 ssl;
server_name www.domain.ltd domain.ltd;
...main config goes here
}
Что мне показалось странным, так это то, что все остальные параметры работают нормально:
http://domain.ltd
перенаправляет на https://www.domain.ltd
http: //www.domain .ltd
перенаправляет на https://www.domain.ltd
https://www.domain.ltd
тоже работает
Но никак для https: // domain.ltd
, отображается только ERR_CONNECTION_REFUSED
.
В чем проблема с конфигурацией? Как решить?
UPD. У меня есть и www.domain.ltd, и domain.ltd, включенные в мой сертификат SSL, поэтому нет причин не работать
Вы допустили ряд ошибок
Если вы не знаете о SSL, попробуйте прочитать мое руководство Nginx / SSL , которое поможет вам получить бесплатный SSL-сертификат Let's Encrypt.
Вот конфигурация, которую можно попробовать
server {
listen 80;
server_name domain.ltd;
return 301 https://www.domain.ltd/$request_uri;
}
server {
listen 443 ssl;
server_name domain.ltd;
ssl_certificate ....; # Insert certificate references
ssl_certificate_key ...; # Insert certificate key references
return 301 https://www.domain.ltd/$request_uri;
}
server {
listen 443 ssl;
server_name www.domain.ltd;
ssl_certificate ....; # Insert certificate references
ssl_certificate_key ...; # Insert certificate key references
...main config goes here
}
Вы должны включить ssl.
SSL - это протокол, HTTP - другой протокол. На стороне сервера номер порта не будет явно указывать протоколы. Вы можете запустить любой из них на любых портах. С другой стороны, браузеры неявно пытаются установить связь, используя http на порту 80 и https (ssl) на 443.
Естественно, если две стороны говорят на разных языках, возникает ошибка связи.
Неважно, хотите ли вы просто перенаправить что-то, открыв веб-сокет или получить веб-страницу, вы должны соответствовать ожиданиям браузера ИЛИ явно указать, что вы хотите.
Вы можете сказать http://some.site.com:443/
, чтобы заставить клиент (браузер) использовать неявный протокол (http без 's' на 443), который, скорее всего, работать с вашей текущей конфигурацией. Но правильно здесь не вводить пользователей в заблуждение и всегда включать ssl (и все навороты) при использовании порта 443.