У меня есть сервер Windows 2016 (FQDN: server1.domain) в домене Active Directory. Я размещаю интрасетевые веб-приложения в IIS.
Недавно я получил псевдоним (FQDN: CoolName.domain) для этого сервера, созданного в DNS. Сертификаты TLS были сгенерированы внутренним центром сертификации. В IIS я привязал порт 443 к именам хостов CoolName.domain
и CoolName
сертификату.
Я хочу иметь возможность перенаправлять мои существующие приложения со старого домена (ie. server1.domain/app1
) на псевдоним (ie. CoolName.domain/app1
) всякий раз, когда люди вводят старый домен. Также принудительно использовать HTTPS, если они используют HTTP.
Я попытался использовать модуль HTTP Redirect на уровне сервера в IIS Manager и заполнил следующее:
Перенаправлять запросы по этому адресу:https://CoolName.домен
Поведение перенаправления: проверено
Redirect all requests to exact destination (instead of relative to destination)
Затем нажал «Применить».
Изображение вариантов, которые я использовал:https://i.stack.imgur.com/vgPld.jpg
При посещении следующих ссылок перенаправление не произошло:
http://server1
http://CoolName
http://CoolName.domain
http://server1.domain
В итоге получилось только перенаправление на https://CoolName.domain
.
Как только я попробовал перенаправить любой URL, который вышел за пределы домена, например http://CoolName.domain/app1
, он не перенаправлялся. Я попробовал снять флажок дляПеренаправлять все запросы по точному адресу назначения (а не относительно него)в №2.
Возможно ли выполнить мое требование, используя только HTTP-перенаправление?
решение1
Я забыл упомянуть в своем первом сообщении, что я получаю ошибки, относящиеся к "Слишком много HTTP-перенаправлений". Оказывается, включение HTTP-перенаправления И перенаправление на ОДИН и тот же веб-сайт (даже с другим псевдонимом) приводит к бесконечному перенаправлению. Видимо, IIS недостаточно умен, чтобы определить, перенаправляет ли он на тот же домен или нет. Вот так. Я в итоге решил свою проблему, следуя инструкциям здесь:https://stackoverflow.com/a/49460688
Подводя итог: вы создаете фиктивный веб-сайт и связываете весь HTTP-трафик порта 80 через этот сайт на IIS, затем вы можете перенаправить на HTTPS, настроенный на вашем оригинальном веб-сайте IIS. Для этого:
- Веб-сайт по умолчанию — привяжите весь HTTP-трафик к свободному порту, отличному от 80 (или удалите привязку HTTP). Оставьте привязки HTTPS в покое.
- Создайте новый веб-сайт в IIS (RedirectSite): привяжите весь HTTP-трафик к порту 80.
- В настройках DummySite нажмите на HTTP Redirect. Установите флажок «Redirect requests to this destination»; в поле URL назначения введите полный домен с HTTPS. Например.https://CoolName.домен. HTTP-код 301. Никакие другие поля не нужно отмечать, так как я хотел перенаправить все относительно домена. Убедитесь, что вы нажали «Применить», чтобы сохранить настройки.
После применения настроек подождите несколько минут, чтобы изменения вступили в силу, если вы используете аутентификацию Windows. У меня возникли проблемы с ошибками аутентификации (HTTP 40x.x), когда я пытался перенаправить. Очистите кэш в клиентском браузере перед тестированием ссылок.
Тест. В итоге я воспользовался ссылками, как в моем первоначальном посте:
http://сервер1
http://CoolName
Эти ссылки должны перенаправлять наhttps://CoolName.домен.
В качестве примечания для обоих веб-сайтов, если применимо:
Убедитесь, что IIS_IUSRS и IUSR имеют разрешения на чтение/выполнение в каталогах веб-сайта. То же самое с [Server_name]\Users
Еще раз проверьте, правильно ли настроена аутентификация Windows.