Я настраиваю 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, вам не нужно использовать скрипт, вы можете сделать те же шаги в графическом интерфейсе.