Proteger o PHP no IIS 8.5

2

Estou usando o IIS 8.5 no Windows Server 2012 R2 para hospedar o ASP.NET e também os aplicativos PHP. Como existem alguns aplicativos PHP diferentes, quero restringir o acesso usando open_basedir. O problema: Com o IIS PHP-Manager, não é possível usar um arquivo php.ini diferente por vHost. Então eu encontrei uma solução personalizada: Depois que o PHP Manager adicionou a atribuição do manipulador php, eu modifiquei o arquivo executável da seguinte forma:

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

Isso está funcionando, o vHost está usando o arquivo php.ini D: \ Sites \ my-domain.com \ php.ini. Mas esta solução parece um pouco suja para mim. Existe uma maneira melhor de configurar um único arquivo php.ini para cada vHost?

    
por Lion 06.05.2014 / 21:27

1 resposta

0

+1 para @ahmelsayed sua resposta. Mas você pode criar vários aplicativos FastCGI no IIS, com diferentes arquivos php.ini facilmente com o Appcmd. Mas apenas um manipulador / php.ini por pool de aplicativos, consulte:

Configure dois aplicativos 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

Cada site pode ter seu próprio Manipulador para .php, apontando para um dos arquivos 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'']"

Se você não gosta da linha de comando, você pode clicar no seu caminho através do Gerenciador do IIS, claro :) BTW, assumindo identidades do pool de aplicativos configurado corretamente e permissões de arquivos NTFS, acredito que não há necessidade de open_basedir.

Edit: Duas referências: link e link para mostrar como adicionar vários aplicativos FastCGI + PHP no IIS.

    
por 23.05.2014 / 19:51