Nginx-Удаление WWW из HTTPS

Nginx-Удаление WWW из HTTPS

Я хотел бы попросить о помощи со следующей конфигурацией 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;
}

Связанный контент