Назад | Перейти на главную страницу

nginx HTTPS WWW перенаправление на не WWW

Мой сертификат SSL предназначен для mydomain.com, поэтому я пытаюсь перенаправить весь www.mydomain.com на без www. Теперь все это работает:

http://www.mydomain.com
http://mydomain.com
https://mydomain.com

но https://www.mydomain.com выводит в браузер предупреждение "Сайт небезопасен" ... Я попытался настроить перенаправление, как показано ниже, но скажите мне, где в моем скрипте есть ошибки ...

     server {
        listen      80;
        server_name www.mydomain.com mydomain.com;
        rewrite     ^(.*)   https://mydomain.com$1 permanent;
        client_max_body_size 100M;
            location / {
                   index    index.htm index.html index.php;
            }

            location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_index index.php;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
            }


    }



    server {
        listen               443;
        ssl                  on;
        ssl_certificate      /usr/local/nginx/conf/public.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server.key;


        server_name www.mydomain.com;
        rewrite ^(.*) https://mydomain.com$1 permanent;

    }





    server {
        listen               443;
        ssl                  on;
        ssl_certificate      /usr/local/nginx/conf/public.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server.key;
        client_max_body_size 100M;
        server_name mydomain.com;
        root /var/www/mysite;
        index index.php;

        location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_index index.php;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
        }


    }

Ваш сценарий конфигурации не содержит ошибок.

В вашей текущей конфигурации (при условии, что у вас установлен стандартный однопользовательский SSL-сертификат), это не вариант.

Причина в том, как работают https-соединения:

Когда клиент (браузер) выдает https-запрос на сервер (nginx), он инициирует сеанс SSL посредством установления связи SSL. Когда и только тогда, когда рукопожатие завершается успешно и сеанс установлен, браузер отправляет фактический HTTP-запрос, содержащий имя хоста. Поскольку SSL / TLS - это не только способ обеспечить шифрование для подключений к данным, но также способ аутентификации сервера перед клиентом. В рамках процесса аутентификации браузер проверяет подлинность сервера. Одна из проверок - сопоставление имени субъекта сертификата с именем хоста, с которого браузер намеревается запрашивать контент. Если эта проверка не удалась, браузер выдает пользователю предупреждение.

Поскольку процесс проверки завершается неудачно, сервер никогда не получает HTTP-запрос для www.mydomain.com на прослушивателе порта 443 и, следовательно, не может отправить ответ перенаправления клиенту / браузеру.

Чтобы включить перенаправление из https://www.mydomain.com/ к https://mydomain.com, у вас есть несколько вариантов, но все сводится к следующему: вам нужен сертификат с темой для каждого имени хоста.

  1. Сертификат SAN

    • Получите сертификат UC / SAN и добавьте www.mydomain.com в качестве SAN (альтернативное имя субъекта)
    • Тема (ы) теперь соответствует запросам для обоих mydomain.com и www.mydomain.com
  2. Несколько IP-адресов

    • Получите другой IP-адрес для своего сервера.
    • Получите сертификат SSL с именем субъекта www.mydomain.com
    • Настроить www.mydomain.com https server для прослушивания нового IP-адреса (по-прежнему порт 443)
    • Настроить www.mydomain.com https server использовать новый сертификат
    • Обновите запись A для www.mydomain.com, чтобы она указывала на новый IP-адрес в вашей общедоступной зоне DNS.
  3. TLS SNI

    • Как и в приведенном выше примере, получите сертификат SSL с именем субъекта. www.mydomain.com
    • Вместо использования другого IP-адреса воспользуйтесь преимуществами Индикация имени сервера Расширение TLS.

Поскольку SNI имеет ограниченную поддержку браузером, я бы избегал предложения 3. Ознакомьтесь с документация nginx по SNI если хотите (внизу страницы)

ОБНОВИТЬ: Некоторые центры сертификации предлагают однопользовательские сертификаты с бесплатным дополнительным SAN для www. префикс.

Вы не можете избежать предупреждений о том, что сайт небезопасен, если ваши домены не совпадают. Ваш сертификат должен быть действителен для каждого отдельного домена, который вы хотите обслуживать через HTTPS, включая домены только для перенаправления.

Если ваш сертификат недействителен для «www.example.com», а действителен только для «example.com», вы не можете выполнять перенаправление с https://www.example.com/ к https://example.com/ без предупреждения о безопасности.

Вы можете попробовать это:

server {    
        listen 443;
        server_name  www.domain.com;
        return 301 https://domain.com$request_uri;
}

В противном случае вы можете получить групповой сертификат, который будет охватывать все домены третьего уровня.