Можно ли настроить IIS 7 так, чтобы один сайт с несколькими привязками (или привязками с подстановочными знаками) запускал уникальный экземпляр для каждого уникального имени хоста?
Чтобы объяснить, почему это желательно, у нас есть приложение, которое получает свою конфигурацию из удаленной системы. Поведение приложения регулируется этой конфигурацией, а не файлом web.config. Приложение использует имя своего хоста в качестве ключа для получения конфигурации. В настоящее время создание идентичного сайта IIS для каждого экземпляра приложения, отличающегося только привязками, выполняется вручную.
Я думал, если бы это было возможно, было бы неплохо иметь один сайт IIS, который эффективно работает как шаблон для произвольного количества динамических сайтов. Всякий раз, когда к нему обращается уникальное имя хоста, запускается новый экземпляр сайта, и все дальнейшие запросы к этому имени хоста будут идти к этому экземпляру, как если бы я создал сайт вручную.
Я использую IIS регулярно, но только для довольно простого хостинга сайтов. Я хотел бы знать, можно ли это настроить с помощью ванильного IIS 7, но также приветствовал бы ответы, для которых требуется плагин или сторонний продукт.
Программные / архитектурные предложения об изменениях в приложении на самом деле не подходят для сбоя сервера.
У вас есть несколько вариантов. Во-первых, я хочу убедиться, что правильно понимаю, когда вы говорите: «Приложение использует имя своего хоста в качестве ключа для получения конфигурации». Под «именем хоста» вы подразумеваете имя веб-сайта IIS или имя домена (обычно называемое именем хоста)? Я предполагаю, что вы имеете в виду имя веб-сайта IIS, поскольку запрашиваете уникальный сайт IIS для каждого уникального доменного имени.
URL Rewrite дает большую гибкость, так что вы можете переопределять или создавать переменные сервера по своему желанию, поэтому, если возможно, это, безусловно, упростит это, если вы можете использовать что-то помимо имени сайта IIS для настроек приложения. Но ... вы просили не предлагать программные / архитектурные изменения, поэтому я вернусь к конкретному ответу на ваш вопрос. Я просто подумал, что упомяну об этом, если вы еще не рассмотрели гибкость, которую предлагает URL Rewrite.
Я бы справился с тем, что вы просили, - это создать сайт под названием «Catch-all», который имеет привязку с подстановочными знаками для IP. На этом сайте должно быть правило перезаписи URL-адреса, чтобы гарантировать, что все запросы, независимо от URL-адреса, обращаются к странице createdite.aspx. Страница createdite.aspx должна иметь доменное имя (Request.ServerVariables ("HTTP_HOST")), создавать сайт и указывать на общую папку. Используйте Microsoft.Web.Administration, чтобы создать сайт, и убедитесь, что пул приложений для этого сайта имеет идентификационные данные администратора в поле IIS. Вот как создать сайт (http://blogs.msdn.com/b/carlosag/archive/2006/04/17/microsoftwebadministration.aspx).
Когда сайт создается, он должен добавить привязку заголовка хоста для нового доменного имени. Таким образом, последующие запросы для этого доменного имени всегда будут перехватываться новым сайтом, а не универсальным сайтом. Другими словами, универсальный сайт используется только при первом использовании определенного доменного имени.
Наконец, страница createdite.aspx должна выполнить response.redirect обратно на исходный URL, включая передачу полного пути и строки запроса. То, как конечный пользователь не осознает, что только что произошло, за исключением короткой паузы и перенаправления, если они случайно смотрят в скрипач.
Исходя из моего понимания того, как работает IIS, я бы сказал, что это невозможно из коробки.
Служба активации Windows WAS находится между http.sys в ядре и различными рабочими процессами, которые запускают пулы / сайты приложений.
На основе конфигурации в существующих файлах (ApplicationHost.Config / web.config) он решает, куда направить входящий запрос. Он может запустить существующий пул приложений, если он еще не запущен, но не может создать новый сайт на основе веб-запроса.
Вы можете подключить свои собственные расширения к конвейеру обработки запросов, но я думаю, только как только запрос попадет в ваш рабочий процесс, а не раньше.
Вы можете написать свой собственный ServiceHost в качестве замены WAS, но я думаю, что это непростая задача.
Я бы начал использовать сценарий для создания новых экземпляров ваших веб-сайтов, передавая переменные. Вы можете легко создать сотни сайтов для всех ваших различных конфигураций.
Если он должен быть более динамичным, вы можете добавить в свое веб-приложение функцию, которая определяет, что нужен новый сайт, она будет показывать страницу «вернуться через 30 секунд» и отправлять сообщение в службу Windows для создания нового сайта. сайт. Новый сайт должен заработать через несколько секунд и сможет отвечать на новые запросы.