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

Безопасный PHP на IIS 8.5

Я использую IIS 8.5 на Windows Server 2012 R2 для размещения ASP.NET, а также PHP-приложений. Поскольку существует несколько различных PHP-приложений, я хочу ограничить доступ с помощью open_basedir. Проблема: с помощью IIS PHP-Manager невозможно использовать другой файл php.ini для каждого vHost. Итак, я нашел собственное решение: после того, как PHP Manager добавил назначение php-обработчика, я изменил исполняемый файл следующим образом:

"C:\Program Files (x86)\PHP\v5.4.26\php-cgi.exe"|-c D:\Sites\my-domain.com

Это работает, vHost использует файл php.ini D: \ Sites \ my-domain.com \ php.ini. Но мне это решение кажется немного грязным. Есть ли лучший способ настроить отдельный файл php.ini для каждого vHost?

+1 за @ahmels сказал свой ответ. Но вы можете легко создать несколько приложений FastCGI в IIS с разными файлами php.ini с помощью Appcmd. Но только один обработчик / php.ini на пул приложений, см.:

Настройте два приложения FastCGI:

Appcmd.exe set config /section:system.webServer/fastCGI
/+"[fullPath='c:\php5\php-cgi.exe', arguments='-c c:\php5\php.site1.ini'], 
maxInstances='0', idleTimeout='300', activityTimeout='70', 
requestTimeout='90', instanceMaxRequests='9999', 
protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost

Appcmd.exe set config /section:system.webServer/fastCGI
/+"[fullPath='c:\php5\php-cgi.exe', arguments='-c c:\php5\php.site2.ini', 
maxInstances='0', idleTimeout='300', activityTimeout='70', 
requestTimeout='90', instanceMaxRequests='9999', 
protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost

Тогда каждый веб-сайт может иметь свой собственный обработчик для .php, указывающий на один из файлов php.ini:

AppCmd.exe set config "site1.com" /section:system.webServer/handlers 
  "-+[name=`'PHP`',
    path=`'*.php`',
    verb=`'*`',
    modules=`'FastCgiModule`',
    scriptProcessor=`'c:\php5\php-cgi.exe|-c c:\php5\php.site1.ini`',
    resourceType=`'File`',
    allowPathInfo=`'true`',
    requireAccess=`'Script`']"

AppCmd.exe set config "site2.com" /section:system.webServer/handlers 
  "-+[name=`'PHP`',
    path=`'*.php`',
    verb=`'*`',
    modules=`'FastCgiModule`',
    scriptProcessor=`'c:\php5\php-cgi.exe|-c c:\php5\php.site2.ini`',
    resourceType=`'File`',
    allowPathInfo=`'true`',
    requireAccess=`'Script`']"

Если вам не нравится командная строка, вы, конечно, можете щелкнуть мышью через диспетчер IIS :) Кстати, при условии правильной настройки идентификаторов пула приложений и разрешений файлов NTFS, я считаю, что нет необходимости в open_basedir.

Изменить: две ссылки: https://www.saotn.org/php-wincache-on-iis/ и https://www.saotn.org/custom-php-version-iis-express-webmatrix3/ чтобы показать, как добавить несколько приложений FastCGI + PHP в IIS.