Назад | Перейти на главную страницу

Можно ли в IIS7 иметь настраиваемые переменные среды для каждого веб-сайта?

Я настраиваю IIS7.5 для внутренней сети компании. На сервере будет размещаться как «тестовый», так и «производственный» сайт. Переменная среды, которую я хочу настроить для каждого сайта, - PERL5LIB.

Я хочу, чтобы этот веб-сервер содержал среду Perl CGI (не FastCGI). (ActiveState Perl v5.16, с использованием PerlIs.dll и PerlEx30.dll). Я хочу, чтобы в этой среде Perl CGI были модули «test» и «prod», чтобы можно было загружать тестовые модули при переходе на «тестовый» сайт. Точно так же модули prod будут загружены при переходе на сайт prod. Ключевым моментом является установка PERL5LIB для каждого сайта.

Apache сделает это с помощью директивы SetEnv, связанной с URL-адресом сайта.

Конечно, это возможно, вы используете два разных пула приложений, запускаете их под разными учетными записями пользователей и устанавливаете пользовательские переменные среды.

Следующий сценарий PowerShell демонстрирует, как это сделать. Я использую ASP.NET на страницах, но вы сможете сделать то же самое в Perl. Для использования сценария вам также необходимо включить сценарий IIS PowerShell.

 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   

Я тестировал это только на 2012 R2, но он должен нормально работать на 2008 R2, вам не нужно использовать скрипт, вы можете сделать те же шаги в графическом интерфейсе.