Мой сертификат 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, у вас есть несколько вариантов, но все сводится к следующему: вам нужен сертификат с темой для каждого имени хоста.
Сертификат SAN
mydomain.com
и www.mydomain.com
Несколько IP-адресов
www.mydomain.com
www.mydomain.com
https server
для прослушивания нового IP-адреса (по-прежнему порт 443)www.mydomain.com
https server
использовать новый сертификатTLS SNI
www.mydomain.com
Поскольку 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;
}
В противном случае вы можете получить групповой сертификат, который будет охватывать все домены третьего уровня.