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

Обратный прокси-сервер Nginx принудительно устанавливает 301 на поддомене (и этого не должно быть)

Поэтому я использую 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.