Я использую промежуточную модель с MSDeploy для развертывания нескольких наших сайтов на веб-ферме. Сайты настраиваются в IIS только на промежуточных блоках, а затем MSDeploy используется для создания целевых веб-серверов с нуля.
Промежуточный блок использует свои собственные привязки (т. е. без записей заголовков, разных IP-адресов/портов и без заголовков узлов) для сайтов, которые будут работать. Когда я их развертываю, у меня сначала есть файл xml, используемый для подготовки параметризованного пакета (с использованием переключателя -declareParamFile
), который объявляет параметры следующим образом:
<parameters>
<parameter name="site1">
<parameterEntry kind="DestinationBinding" scope="Site1" match=":17000:" />
</parameter>
</parameters>
Таким образом, в приведенном выше XML вы можете видеть, что промежуточный сайт размещен на порту 17000, поскольку атрибут match
установлен в соответствии с привязкой, которая имеет это значение.
Когда я затем выполняю развертывание на каждом активном сайте, я использую другой XML-параметр параметров, который указывает правильный заголовок хоста и IP-адрес для этой машины — я применяю это с помощью переключателя -setParamFile. Вот пример одного из них.
<parameters>
<setParameter name="site1" value="[ip_addr]:[port]:[host_header]"/>
</parameters>
Итак, поскольку исходный параметр объявлен как соответствующий одной из известных привязок, я могу заменить эту привязку тем, что я действительно хочу, чтобы она была на каждом работающем сервере.
Что я хочу сделать сейчас, так это развернуть сайт и добавить к нему новые привязки назначения, которые включают в себя различные TLD, которые у нас есть, например, site.com, site.co. uk, site.ca и т. д., все привязаны к одному и тому же IP-адресу и порту.
Причины желания сделать это:
- У нас есть новый сайт, который мы хотим развернуть, для которого потребуется другое имя хоста, но мы не хотим давать ему собственный IP-адрес (здесь заканчиваются IP-адреса!). сервера уже есть.
- Это означает добавление определенных привязок имени хоста к сайту, который уже есть, вместо того, чтобы он отвечал на любое имя хоста.
- У нас есть четыре доменных имени, которые в настоящее время указывают на IP-адрес с балансировкой нагрузки существующего сайта (.com, .us, .ca, .com.au). На данный момент это работает, потому что веб-сервер не заботится о заголовке хоста, но когда новый сайт перейдет на тот же IP, он будет, а другие доменные имена больше не будут работать.
Проблема в том, что я не думаю, что есть какой-либо способ добавить такую информацию. Я попытался добавить несколько элементов setParameter
во второй XML, но это просто приводит к повторной перезаписи привязки, причем последний становится окончательным победителем.
Одним из решений для меня является добавление привязок «заполнителя» для каждого из сайтов в промежуточном блоке, которые представляют целевые внешние привязки для каждого доменного имени, порта и т. д.; а затем я изменяю два файла параметров, чтобы заменить эти привязки реальными.
Но мне это кажется совершенно неправильным — это было бы моделирование промежуточного блока, чтобы подходить для реального развертывания; должно быть наоборот.
Можно ли на самом деле добавить привязки сайтов с помощью MSDeploy (если да, то как?), или он поддерживает только замену?