
Я хотел бы попросить о помощи со следующей конфигурацией Nginx, чтобы URL-адреса, такие как , https://www.mywebsite.com
были переписаны как https://mywebsite.com
. В настоящее время я использую следующую конфигурацию:
server {
server_name www.mywebsite.com;
return 301 $scheme://mywebsite.com$request_uri;
}
server {
listen 80;
server_name mywebsite.com;
# Some more settings...
}
server {
listen 443 ssl;
server_name mywebsite.com;
ssl_certificate path_to_ssl_certificate;
ssl_certificate_key path_to_ssl_certificate_key;
# Some more settings...
}
Если это имеет значение, сертификат, который я использую, является wildcard SSL-сертификатом, который был подписан с помощью OpenSSL на самом сервере (Ubuntu 12.04). Происходит то, что www.mywebsite.com
правильно перенаправляет на mywebsite.com
, ноhttps://www.mywebsite.com
неперенаправление на https://www.mywebsite.com
(т.е. www
все еще отображается при просмотре страницы в браузере). Что я могу делать неправильно?
решение1
Решением является исправление первого серверного блока следующим образом:
server {
listen 80;
listen 443;
server_name www.mywebsite.com;
return 301 $scheme://mywebsite.com$request_uri;
}
Например, вы забыли перехватить www.mywebsite.com соединения на ssl порту, вот и все. Кстати, это лучший способ убрать www из имени сайта, хороший выбор.
решение2
Ваше перенаправление происходит на виртуальном хосте, который прослушивает только порт 80. Для перенаправления запросов, поступающих через SSL, вам нужен виртуальный хост, который прослушивает порт 443 с SSL. Если только все ваши браузеры не поддерживаютСНИу вас может быть только один виртуальный хост SSL, поэтому правило должно быть добавлено в ваш существующий server
блок SSL.
if ($host = www.mywebsite.com) {
rewrite ^ https://mywebsite.com$request_uri? permanent;
}