1

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

В случае, если это имеет значение, сертификат, который я использую, является подстановочным SSL-сертификатом, который был подписан с помощью OpenSSL на самом сервере (Ubuntu 12.04). То , что происходит в том , что www.mywebsite.com правильно перенаправляет mywebsite.com но https://www.mywebsite.com не перенаправляет на https://www.mywebsite.com (т.е. www - прежнему отображается при просмотре страница в браузере). Что я могу делать не так?

2 ответа2

3

Решением является фиксация первого блока сервера следующим образом:

server {
    listen 80;
    listen 443;
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}

Например, вы забыли перехватить соединения www.mywebsite.com через порт ssl, вот и все. Кстати, это лучший способ убрать www из названия сайта, хороший выбор.

0

Перенаправление происходит на виртуальном хосте, прослушивающем только порт 80. Чтобы перенаправить запросы, поступающие через SSL, вам нужен виртуальный хост, прослушивающий порт 443 с SSL. Если все ваши браузеры не поддерживают SNI, у вас может быть только один виртуальный хост SSL, и поэтому правило должно входить в существующий блок server SSL.

if ($host = www.mywebsite.com) {
    rewrite ^ https://mywebsite.com$request_uri? permanent;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .