Псевдонимы к web-ресурсам на базе IIS + ISA
Я думаю, у многих возникала задача обеспечить для своего корпоративного сайта несколько вариантов FQDN. Например — www.novgaro.ru, ГАРО.РФ, novgaro.ru и так далее. Всё, что необходимо для этого, можно выполнить и на хостинге. Но в некоторых случаях (например — с целью оценки целесообразности содержания того либо иного домена) Вы хотите обеспечить перенаправление сами, с целью регистрации запросов в журнале с последующим анализом.
Данная задача элементарно решается средствами IIS. Рассмотрю здесь ситуацию по следующим этапам: настройка IIS7, создание / корректировка правил на ISA, корректировка файла dns зоны.
Настройка IIS7 средствами powershell
Итак, нам необходимо создать web-site, который, кроме регистрации обращений в журнале, будет обеспечивать перенаправление. В конце концов, хотим иметь возможность написать следующее:
'novgaro.ru', 'garotrade.ru', 'rudetrans.ru', 'support.novgaro.ru' | New-WebRedirectionи получить в результате необходимые и рабочие web-сайты, обеспечивающие постоянное (перманентное) перенаправление запросов к ним на соответствующие www. ресурсы.
приведу текст powershell модуля, который решает эту задачу
:
set-variable -name itgWebRedirectionServicePostfix -value 'web.inet.services.novgaro.ru' -option constant set-variable -name itgWebRedirectionIISServer -value 'web.inet.services.novgaro.ru' -option constant set-variable -name itgDNSZone -value 'novgaro.ru' -scope global function New-WebRedirection { <# .Synopsis Создаёт приложение IIS (web site), целью которого является совместно с правилом web публикации на ISA обеспечить перенаправление http запросов на основной web сервер (www.domain) .Description Создаёт приложение IIS (web site), целью которого является совместно с правилом web публикации на ISA обеспечить перенаправление http запросов на основной web сервер (www.domain). Для домена novgaro.com будет создан сайт novgaro-com.web.inet.services.novgaro.ru, файловый ресурс которого будет создан в папке physicalRoot. Данный сайт на все получаемые http запросы будет отвечать постоянной ошибкой - ресурс переехал на www.domain. При этом сервис будет размещён на порту port и будет отвечать на host header novgaro-com.web.inet.services.novgaro.ru. При этом также будет предпринята попытка создания необходимых dns записей. .Parameter domain Домен, для которого требуется создать сервис перенаправления http запросов. Будет создан web сервис, который будет все http запросы перенаправлять на url www.domain. .Parameter port Порт, на котором будем активировать сервис. Если не указан - 80. .Parameter physicalRoot Папка, в которой будет создан файловый ресурс для сервиса. .Parameter applicationPool Пул приложений IIS, в котором будет создан сервис. .Example Создание группы сервисов: "rtsauto.ru","garotrade.ru" | New-WebRedirection #> param ( [Parameter( Mandatory=$true, Position=0, ValueFromPipeline=$true, HelpMessage='Домен, для которого требуется создать сервис перенаправления http запросов.' )] [string]$domain, [Parameter( Mandatory=$false, Position=1, ValueFromPipeline=$false, HelpMessage='Порт, на котором будем активировать сервис.' )] [int]$port = 80, [Parameter( Mandatory=$false, Position=2, ValueFromPipeline=$false, HelpMessage='Папка, в которой будет создан файловый ресурс для сервиса' )] [string]$physicalRoot = "${env:systemdrive}\inetpub\redirecting", [Parameter( Mandatory=$false, Position=3, ValueFromPipeline=$false, HelpMessage='Пул приложений IIS, в котором будет создан сервис' )] [string]$applicationPool = 'WEB sites redirecting' ) PROCESS { [string]$hostHeaderPrefix = $domain.replace( '.', '-') [string]$webServiceName = "${hostHeaderPrefix}.${itgWebRedirectionServicePostfix}" [string]$physicalPath = "${physicalRoot}\${webServiceName}" # регистрация записей в dns # The text version of the record. Must include Class (IN) or this will fail. # @ represents the origin, or zone / domain name. $DNSRecordAsText = "${webServiceName} IN CNAME ${itgWebRedirectionIISServer}." $DNSRRClass = [WMIClass]\\$itgDNSServer\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord $DNSRecord = $DNSRRClass.CreateInstanceFromTextRepresentation($itgDNSServer, $itgDNSZone, $DNSRecordAsText) # создание web сервиса if ([System.IO.Directory]::Exists("${physicalPath}") -eq $false) { new-item "${physicalPath}" -type Directory } $site = new-item "IIS:\Sites\${webServiceName}" ` -physicalPath "${physicalPath}" ` -bindings @{` protocol='http';` bindingInformation=";*:${port}:${webServiceName}"` } ` -applicationPool $applicationPool ` -force $site.enabledProtocols = 'http' $site.limits.maxBandwidth = 1024 $site.limits.maxConnections = 100 $site.serverAutoStart = $true set-webConfiguration ` -psPath "IIS:\Sites\${webServiceName}" ` -filter "system.webServer/httpRedirect" ` -value @{ ` enabled='true';` destination="http://www.${domain}/";` childOnly='false';` exactDestination='false';` httpResponseStatus='Permanent'` -force set-webConfiguration ` -psPath "IIS:\Sites\${webServiceName}" ` -filter "system.webServer/caching" ` -value @{ ` enabled='false';` enableKernelCache='false'` } ` -force $site.Start() write-output $site } }Мы не просто создаём сайт, мы его должным образом конфигурируем, размещаем его в предварительно созданном пуле WEB sites redirecting, и запускаем. Необходимую dns запись (в комментариях к функции прописана) создаём также скриптом.
Правила публикации на ISA
Теперь настраиваем правила публикации на ISA. Здесь не привожу скриптов, потому как для ISA 2000 powershell применить не смог. Порядок действий:
- создаём destination set (в нашем случае, в качестве примера — garotrade.ru)
- в нём указываем все FQDN, с которых мы должны обеспечить перенаправление (на www.garotrade.ru)
- создаём web publishing rule (garotrade.ru)
- указываем redirect to garotrade-ru.web.inet.services.novgaro.ru, исходное HOST name не сохраняем. Как уже понятно из скрипта все подобные FQDN создаются как CNAME к web.inet.services.novgaro.ru, который и должен показывать на наш IIS.
- перезапускаем web proxy службу.
На этом настройка ISA закончена. Можем анализировать в дальнейшем как логи ISA, так и IIS (в зависимости от задачи).
Файл зоны DNS
Ну и напоследок не забудем про файл зоны для наших доменов, с которых мы должны обеспечить перенаправление. Продолжаем пример для garotrade.ru, домен-алиас — garo-trade.ru:
Database file garo-trade.ru.dns for garo-trade.ru zone. @ IN SOA ns.novgaro.ru. hostmaster.novgaro.ru. ( 2010072603 ; serial number 7200 ; refresh 600 ; retry 1209600 ; expire 3600 ) ; minimum TTL ;Zone NS records @ IN NS ns.natm.ru. @ IN NS ns.novgaro.ru. ;Zone records @ IN A 213.148.164.198 www IN CNAME gate.novgaro.ru. ; mail services @ IN MX 10 mx.novgaro.ru. @ IN TXT ( "v=spf1 redirect=_spf.novgaro.ru" ) @ IN TXT ( "spf2.0/mfrom,pra redirect=_spf.novgaro.ru")Остановимся на выделенных записях. Я думаю, CNAME www ни у кого вопросов не вызвал — указывает на наш ISA Server. Может возникнуть вопрос: почему мы для @ записи не использовали CNAME? Нельзя. В этом случае никаких других записей для @ (в том числе TXT, MX, NS) быть не должно. Поэтому вынуждены явно указывать IP и использовать A запись.
Зачем нам MX? По RFC (скажем — по рекомендациям RFC) при публикации web сервиса в домене мы должны обеспечить приём почты на webmaster@domain по вопросам администрирования сайта. Поэтому и MX в домене прописать имеет смысл (адекватная настройка почтового сервера за пределами этой темы). Ну а TXT записи, точнее — spf и sender-id политики, прописать следует. Не стоит облегчать жизнь спамерам.
RSS комментарии
Обратная ссылка