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

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

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

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

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

решение1

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

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

Связанный контент