在 IIS 8.5 上保护 PHP

在 IIS 8.5 上保护 PHP

我在 Windows Server 2012 R2 上使用 IIS 8.5 来托管 ASP.NET 和 PHP 应用程序。由于有几个不同的 PHP 应用程序,我想使用 open_basedir 来限制访问。问题:使用 IIS PHP 管理器,无法为每个 vHost 使用不同的 php.ini 文件。因此,我找到了一个自定义解决方案:在 PHP 管理器添加了 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。但这个解决方案对我来说有点不妥。有没有更好的方法为每个 vHost 设置一个 php.ini 文件?

答案1

+1 @ahmelsayed 的回答。但是您可以使用 Appcmd 在 IIS 中轻松创建具有不同 php.ini 文件的多个 FastCGI 应用程序。但每个应用程序池只有一个处理程序/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/展示如何在 IIS 中添加多个 FastCGI + PHP 应用程序。

相关内容