No IIS7, é possível ter variáveis de ambiente personalizadas por site?

3

Estou configurando o IIS7.5 para uma intranet da empresa. O servidor hospedará um site 'test' e 'prod'. A variável de ambiente que desejo personalizar por site é 'PERL5LIB.

Eu quero que este servidor web contenha um ambiente Perl CGI (não FastCGI). (ActiveState Perl v5.16, usando PerlIs.dll e PerlEx30.dll). Eu quero que este ambiente Perl CGI tenha módulos de 'teste' e 'prod', então módulos de teste podem ser carregados ao acessar o site de 'teste'. Da mesma forma, os módulos prod serão carregados ao acessar o site 'prod'. A configuração de PERL5LIB por site é a chave.

O Apache faria isso com uma diretiva SetEnv associada à URL do site.

    
por drybij 03.03.2015 / 15:38

1 resposta

2

Claro, é possível usar dois pools de aplicativos diferentes, executá-los em diferentes contas de usuários e definir variáveis de ambiente baseadas no usuário.

O seguinte script do PowerShell demonstra como fazer isso. Eu estou usando o asp.net nas páginas, mas você deve ser capaz de fazer o mesmo em Perl. Você também precisa do script do IIS PowerShell habilitado para usar o script

 Import-Module WebAdministration

 Function Prepare([string]$name,[int]$port)
 {
     # create a new directory for the site
     md c:\inetpub\site$name

     # create a new application pool
     New-WebAppPool "pool$name"

     # create a new site using the folder and pool we just created
     New-WebSite -name "site$name" -port $port -physicalpath "c:\inetpub\site$name" -applicationpool "pool$name"

     # Make sure the pool runs as applicationpoolidentity and loads its user profile
     set-webconfigurationproperty -pspath 'machine/webroot/apphost'  -filter "system.applicationhost/applicationpools/add[@name='pool$name']/processmodel" -name "identitytype" -value "applicationpoolidentity"
     set-webconfigurationproperty -pspath 'machine/webroot/apphost'  -filter "system.applicationhost/applicationpools/add[@name='pool$name']/processmodel" -name "loaduserprofile" -value "true"

     # create two pages, one to show the environment variable, the other to set it.
     "<%@ page %><html># <% response.write(system.environment.getenvironmentvariable('"myvar'")) %> #</html>" | out-file  "c:\inetpub\site$name\default.aspx"
     "<%@ page %><%  system.environment.setenvironmentvariable('"myvar'", '"i am site $name'", system.environmentvariabletarget.user) %>" | out-file "c:\inetpub\site$name\setenv.aspx"

     # hit the home page, just to get it started
     (new-object net.webclient).DownloadString("http://localhost:$port")
     # set our environment variable
     (new-object net.webclient).DownloadString("http://localhost:$port/setenv.aspx")
     # recycle the pool
     Restart-WebAppPool -Name "Pool$name"
     # wait a little bit to restart
     Start-Sleep -Milliseconds 500
     # hit the home page again to show our variable
     (new-object net.webclient).DownloadString("http://localhost:$port")
 }

 # call the function for two sites
 Prepare A 81
 Prepare B 82   

Eu só testei isso em 2012 R2, mas ele deve rodar bem no 2008 R2, você não precisa usar o script, você pode fazer os mesmos passos na GUI.

    
por 03.03.2015 / 21:18

Tags