Ist es in IIS7 möglich, benutzerdefinierte Umgebungsvariablen pro Website zu haben?

Ist es in IIS7 möglich, benutzerdefinierte Umgebungsvariablen pro Website zu haben?

Ich richte IIS7.5 für ein Firmenintranet ein. Der Server wird sowohl eine Test- als auch eine Produktionssite hosten. Die Umgebungsvariable, die ich pro Site anpassen möchte, ist „PERL5LIB“.

Ich möchte, dass dieser Webserver eine Perl-CGI-Umgebung (keine FastCGI-Umgebung) enthält. (ActiveState Perl v5.16, mit PerlIs.dll und PerlEx30.dll). Ich möchte, dass diese Perl-CGI-Umgebung sowohl ein Test- als auch ein Produktionsmodul hat, sodass Testmodule geladen werden können, wenn die Test-Site aufgerufen wird. Ebenso werden Produktionsmodule geladen, wenn die Produktions-Site aufgerufen wird. Das Festlegen von PERL5LIB pro Site ist der Schlüssel.

Apache würde dies mit einer SetEnv-Direktive tun, die mit der URL der Site verknüpft ist.

Antwort1

Natürlich ist es möglich, dass Sie zwei verschiedene Anwendungspools verwenden, diese unter unterschiedlichen Benutzerkonten ausführen und benutzerbasierte Umgebungsvariablen festlegen.

Das folgende PowerShell-Skript zeigt, wie das geht. Ich verwende ASP.NET auf den Seiten, aber Sie sollten dasselbe auch in Perl tun können. Um das Skript verwenden zu können, muss außerdem IIS PowerShell-Skripting aktiviert sein.

 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   

Ich habe dies nur auf 2012 R2 getestet, aber es sollte auf 2008 R2 problemlos laufen. Sie müssen das Skript nicht verwenden, Sie können dieselben Schritte in der GUI ausführen.

verwandte Informationen