IIS 7: lança uma instância única do site por nome de host

2

É possível configurar o IIS 7 para que um único site com várias ligações (ou associações de caracteres curinga) inicie uma instância exclusiva para cada nome de host exclusivo?

Para explicar por que isso é desejável, temos um aplicativo que recupera sua configuração de um sistema remoto. O comportamento do aplicativo é governado por essa configuração e não pelo 'web.config'. O aplicativo usa seu nome de host como uma chave para recuperar a configuração. Atualmente, é um processo manual para criar um site IIS idêntico para cada instância do aplicativo, diferindo apenas pelas associações.

Meu pensamento, se fosse possível, é que seria bom ter um site do IIS que funcionasse efetivamente como um modelo para um número arbitrário de sites dinâmicos. Sempre que for acessado por um nome de host exclusivo, uma nova instância do site será iniciada e todas as outras solicitações para esse nome de host serão enviadas para essa instância, como se eu tivesse criado o site manualmente.

Eu uso o IIS regularmente, mas apenas para hospedagem de sites bastante simples. Gostaria de saber se isso pode ser configurado com o baunilha do IIS 7, mas também receberia respostas que exigem um plug-in ou um produto de terceiros.

As sugestões de programação / arquitetura sobre alterações no aplicativo não seriam apropriadas para o serverfault.

    
por OlduwanSteve 26.11.2012 / 12:18

2 respostas

1

Do meu entendimento de como o IIS funciona, eu diria que isso não é possível de imediato.

O WAS do Windows Activation Service fica entre o http.sys no kernel e os vários processos de trabalho que executam os pools / sites de aplicativos.

Com base na configuração em arquivos existentes (ApplicationHost.Config / web.config), ele decide para onde rotear uma solicitação recebida. Ele pode iniciar um ApplicationPool existente, se ainda não estiver em execução, mas não pode criar um novo site com base em uma solicitação da Web.

Você pode conectar suas próprias extensões ao pipeline de processamento de solicitações, mas acho que apenas assim que a solicitação atingir seu processo de trabalho, não antes.

Você poderia escrever seu próprio ServiceHost como substituto do WAS, mas acho que não é uma tarefa pequena.

Eu começaria usando um script para criar novas instâncias de seus sites, passando as variáveis. Você pode criar facilmente centenas de sites para todas as suas diferentes configurações.

Se tiver que ser mais dinâmico, você pode adicionar um recurso ao seu aplicativo da Web que detecte a necessidade de um novo site, mostre uma página "voltar em 30 segundos" e envie uma mensagem para um serviço do Windows para crie um novo site. O novo site deve estar pronto em alguns segundos e pode responder a novos pedidos.

    
por 01.12.2012 / 18:20
1

Você tem algumas opções. Primeiro, quero ter certeza de que entendi corretamente quando você diz "O aplicativo usa seu nome de host como uma chave para recuperar a configuração". Por "nome do host", você quer dizer o nome do site do IIS ou o nome do domínio (geralmente chamado de nome do host)? Suponho que você esteja falando do nome do site do IIS, pois está solicitando um site único do IIS para cada nome de domínio exclusivo.

O URL Rewrite fornece muita flexibilidade para que você possa substituir ou criar variáveis de servidor à vontade, portanto, se possível, isso certamente tornaria isso mais fácil se você pudesse usar algo além do nome do site IIS para as configurações do aplicativo. Mas ... você pediu para não oferecer mudanças de programação / arquivamento, então eu voltarei a responder sua pergunta especificamente. Eu apenas pensei em mencionar isso caso você não tenha considerado a flexibilidade que o URL Rewrite oferece ainda.

A maneira como eu lidaria com o que você solicitou é ter um site chamado "Catch-all", que tem uma ligação de caractere curinga para o IP. Esse site deve ter uma regra de regravação de URL para garantir que todas as solicitações, independentemente do URL, acessem uma página createsite.aspx. A página createsite.aspx deve receber o nome do domínio (Request.ServerVariables ("HTTP_HOST")) e criar o site e apontar para a pasta compartilhada. Use o Microsoft.Web.Administration para criar o site e verifique se o pool de aplicativos desse site tem uma identidade de administrador na caixa IIS. Veja como criar o site ( link ).

Quando o site é criado, ele deve adicionar uma ligação de cabeçalho de host para o novo nome de domínio. Dessa forma, as solicitações subsequentes para esse nome de domínio sempre serão capturadas pelo novo site, em vez do site "pega-tudo". Em outras palavras, o site pega-tudo é usado apenas na primeira vez que um nome de domínio específico é usado.

Por fim, a página createsite.aspx deve fazer uma resposta.redirecione de volta para a URL original, incluindo a passagem pelo caminho completo e pela querystring. A maneira como o usuário final não vai perceber o que acabou de acontecer, exceto por uma breve pausa e um redirecionamento, se acontecer de eles estarem assistindo no violinista.

    
por 03.12.2012 / 23:14