Por que o script wrapper do php-cgi para o php-fpm? (Usando virtualhost e suexec.)

1

Acabei de configurar meu servidor com Apache, FastCGI e PHP-FPM. Minha pergunta é sobre a pasta / cgi-bin /: é realmente necessário ter um wrapper / cgi-bin / php-fpm para cada host virtual que executa o apache usando um usuário / grupo diferente? Além disso, se um usuário excluir a pasta cgi-bin ... os benefícios fpm / fastcgi serão perdidos. Idealmente, gostaria de configurar o PHP-FPM sem a necessidade de nada fora do arquivo .conf.

Tanto quanto eu posso dizer, o binário php-cgi (que é tudo o que o wrapper php-fpm executa) é executável por todos os usuários no sistema ... então por que o incômodo de envolver o mesmo executável que vai ser executado pelo usuário de qualquer maneira? Mais especificamente, como posso alterar essa configuração para usar o binário php-cgi diretamente, em vez de passar pelo wrapper?

Os arquivos / resultados relevantes relacionados à minha pergunta são:

/etc/apache2/modules.d/20_mod_fpm.conf
---------------------------------------------------------------------------------
...

FastCgiExternalServer /var/www/localhost/cgi-bin/php-fpm -host 127.0.0.1:9000

AddHandler php-fpm .php
Action php-fpm /cgi-bin/php-fpm

DirectoryIndex index.php

...
/var/www/localhost/cgi-bin/php-fpm
---------------------------------------------------------------------------------
#!/usr/bin/php-cgi
phpinfo()
---------------------------------------------------------------------------------
...
Server API: FPM/FastCGI
...

Adorável. A execução de benchmarks informa que a configuração está, de fato, funcionando muito bem: com ~ 135 solicitações por segundo, em vez de 13 solicitações por segundo usando a configuração padrão do intérprete Apache / PHP. Então, tudo o que resta é tornar o aspecto multiusuário perfeito.

    
por Caleb Gray 05.01.2012 / 01:27

2 respostas

1

Como exemplo, em máquinas Redhat / centos, o php-fpm é na verdade um binário no diretório / usr / sbin /. Ele intercepta a chamada do servidor (apache / nginx) para processar solicitações php. As configurações do php-fpm podem ser ajustadas em php-fpm.conf ( link ), que permite ajustar o seu sistema. O php-fpm é bastante avançado e dá a você muito controle ao seu sistema.

De alguma forma, o arquivo php-fpm em seu sistema parece mais um empacotador normal de fastcgi / cgi. Se você quiser ignorar usando "sua versão do php-fpm" e usar o php-cgi diretamente, você pode usar um wrapper fastcgi personalizado. Um exemplo de um wrapper fastcgi personalizado é:

#!/bin/bash
### Set PATH ###
PHP_CGI=/usr/bin/php-cgi
PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

Uma das opções que podem ser definidas no php-fpm.conf é permitir que você execute scripts php como outro usuário. O Suexec também fornece essa função e pode ser chamado pelo Apache para passar a requisição para o wrapper fastcgi que irá manipular arquivos php. Juntos, o suexec + fastcgi fornece algumas das principais funções do php-fpm e, portanto, pode ser usado como uma alternativa.

    
por 03.07.2012 / 23:46
0

Usar um wrapper permite que você, opcionalmente, faça configurações adicionais, como definir variáveis de ambiente, selecionar um arquivo php.ini, etc.

    
por 05.01.2012 / 01:34