Поэтому я использую Nginx (1.4.3) для обратного прокси-сервера домена и поддоменов. Я установил сертификаты SSL для обработки основного домена (example.com) и пары поддоменов (скажем, test.example.com и mail.example.com). Поэтому я, естественно, использовал возврат 301, чтобы переместить HTTP-запросы на https.
server {
listen 80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
Прекрасно работает. Но если я введу еще один субдомен, который мне не нужен в рамках сертификатов SSL HTTPS (потому что у меня нет сертификата с подстановочными знаками, и он не нужен для этого субдомена). Nginx по-прежнему применяет к нему 301, хотя server_name
был установлен неявно. Поскольку это 1.4.3, я разделил их на conf.d
папка.
Я полагаю, что он делает это, потому что, если я очищаю кеш браузера и перехожу к новому поддомену (sd.example.com), он работает нормально и не перезаписывается на https. Но затем, если я перейду на основной сайт (example.com), начнется перезапись, меня отправят на https://example.com, и никаких проблем нет. Но затем, если я попытаюсь вернуться на sd.example.com, меня перепишут на https://sd.example.com и появляется большая красная ошибка хрома.
Есть идеи, почему это происходит? Я бы предпочел перестать биться об этом.
опубликовал ответы из комментария OP
Проблема была вызвана заголовком HSTS. В основном домене есть запись includeSubDomains
в HSTS заголовок. Если браузер посещает основной домен и получает этот заголовок HSTS, браузер принудительно подключится через HTTPS в основной домен и субдомен тоже. Итак, совершенно очевидно, что nginx не вызывает перенаправления.
Если вы не хотите, чтобы субдомен использовал HTTPS, решение - удалить includeSubDomains
в заголовке HSTS.