У меня есть сертификат SSL, действительный только для example.com (недействительный для поддоменов), и поэтому я хочу перенаправить оба http://example.com и http://www.example.com к https: //example.com с использованием nginx. Мой файл конфигурации начинается следующим образом:
server {
# This should catch all non-HTTPS requests to example.com and *.example.com
listen 80;
server_name example.com www.example.com;
access_log off;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
# Actual server config starts here...
Однако перенаправление не работает должным образом. Запрос http://example.com правильно ведет к https://example.com, но http://www.example.com будет перенаправлен на https://www.example.com что приводит к ошибке SSL, поскольку мой сертификат недействителен для поддоменов. Я знаю, что нет возможности перенаправления с недопустимого HTTPS на действительный HTTPS, но я, по крайней мере, хочу добиться перенаправления с HTTP на HTTPS, потому что пользователи по-прежнему склонны вводить www. в браузере.
Когда я wget --spider www.example.com
, он возвращает правильный результат:
Spider mode enabled. Check if remote file exists.
--2015-03-19 02:22:47-- http://www.example.com/
Resolving www.example.com (www.example.com)... ***.***.***.***
Connecting to www.example.com (www.example.com) **** connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://example.com/ [following]
Spider mode enabled. Check if remote file exists.
--2015-03-19 02:22:47-- https://example.com/
...
Но по какой-то причине браузеры запрашивают https://www.example.com скорее, чем https://example.com. Я уже пробовал использовать несколько браузеров и компьютеров. Где моя ошибка? Весь первый блок сервера в файле конфигурации кажется полностью проигнорированным - если я удалю его, браузер покажет точно такое же поведение (с отключенным кешем DNS), тогда как вывод wget --spider
постоянно меняется.