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

nginx: перенаправление с http: //*.example.com на https://example.com демонстрирует странное поведение

У меня есть сертификат 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 постоянно меняется.