Я хотел бы указать пользователя test1.domain.com test2.domain.com и т.д., не добавляя вручную привязку заголовка в IIS7. Это возможно? Если не автоматически, могу ли я программно добавить заголовок хоста?
Да, ты можешь.
Можно использовать подстановочный SSL-сертификат и один IP-адрес.
Я могу подробно описать, как это проверить, используя самозаверяющий шаблон.
Предпосылки
Метод
Выполните следующую команду из командной строки
makecert -r -pe -n CN=*.domain.com -ss my -sr currentuser -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 wildcard.domain.cer
затем
Теперь давайте создадим ваши веб-серверы
Удалите существующие пулы демонстрационных приложений и сайты
%windir%\system32\inetsrv\Appcmd delete site "Demo 1"
%windir%\system32\inetsrv\Appcmd delete site "Demo 2"
%windir%\system32\inetsrv\Appcmd delete AppPool "Demo 1 App Pool"
%windir%\system32\inetsrv\Appcmd delete AppPool "Demo 2 Portal App Pool"
Сообщите Windows, что сетевой службе разрешен доступ к вашему сертификату с подстановочными знаками. и скажите ему привязать сертификат к порту 443 на вашем IP-адресе
PathToWinHTTPCertCfg\winhttpcertcfg -g -i "wildcard.domain.com.pfx" -c LOCAL_MACHINE\My -a “Network Service” -p MySecretPassword
netsh http add sslcert ipport=<YOURLOCALIPADDRESS>:443 certhash=<CERTIFICATE THUMBPRINT> appid=<A GUID IN THE FORM OF {ab3c58f7-8316-42e3-bc6e-771d4ce4b201}>
Это код для создания пулов приложений и сайтов.
%windir%\system32\inetsrv\Appcmd add site -id:100 -name:"Demo 1" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo1Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles>
%windir%\system32\inetsrv\Appcmd set app "Demo 1/" -applicationPool:"Demo 1 App Pool"
%windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 1" /+bindings.[protocol='https',bindingInformation='*:443:demo1.domain.com']
%windir%\system32\inetsrv\Appcmd add site -id:200 -name:"Demo 2" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo2Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles>
%windir%\system32\inetsrv\Appcmd set app "Demo 2/" -applicationPool:"Demo 2 App Pool"
%windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 2" /+bindings.[protocol='https',bindingInformation='*:443:demo2.domain.com']
... и это должны быть вы;) Наслаждайтесь!
Насколько я знаю, есть только два варианта, когда дело доходит до заголовков хоста в IIS7.
Уловка с вариантом №2 заключается в том, что он будет отвечать на любой запрос на этом порту, и вы не сможете использовать тот же порт на другом сайте без заголовка хоста.
Может быть фильтр ISAPI, который вы можете загрузить на уровне сервера, чтобы перехватить запрос, прежде чем он попадет в часть обработки заголовка хоста, но может быть проще настроить сценарий для обработки варианта №1.
Настроив запись DNS с подстановочными знаками, вы можете иметь столько имен, сколько хотите, для перехода на свой веб-сайт по умолчанию. После того, как пользователь перейдет на этот веб-сайт, если вам нужно перенаправить его на другой сайт, пусть ваш файл default.asp ищет заголовок HOST, чтобы определить, нужно ли ему перенаправить, в противном случае загрузите остальную часть сайта.
Ссылки:
Заголовки хоста с подстановочными знаками с IIS7
Я не очень хорошо разбираюсь в веб-разработке, но это должно, по крайней мере, помочь вам начать.