Substituir valores de configuração do pool php-fpm por outro arquivo

11

Tendo que personalizar a configuração do pool php-fpm de um novo servidor, pergunto-me se é possível / permitido / recomendado ter um novo arquivo de pool, cujo nome é alfabético após o original, que possui apenas valores que substituem a configuração inicial.

A configuração original está /etc/php/7.0/fpm/pool.dnomeada www.conf.

Parece que, de acordo com as páginas relacionadas à instalação, os engenheiros modificam diretamente o original (salvando uma cópia dos valores iniciais). Por exemplo

[www]
...
user www-data
group www-data
pm.max_children 2

dá após modificação

[www]
...
user myapp         ; was www-data
group myapp        ; was www-data
pm.max_children 8  ; was 2

Mas parece que pode ser uma tarefa a ser repetida após a próxima atualização do php-fpm (além disso, a configuração está em um 7.0caminho, isso é preocupante).

Em vez de modificar o arquivo original, eu gostaria de mantê-lo inalterado e adicionar outro, digamos wwwmyapp.confque declararia o mesmo pool e possuísse apenas os valores que foram alterados

no wwwmyapp.conf

[www]        ; same pool!
user myapp
group myapp
pm.max_children 8

in pool.d, lista de arquivos

www.conf
wwwmyapp.conf

como em php-fpm.conftodos os arquivos conf do conjunto são carregados, os valores de wwwmyappserão lidos após os de www(no mesmo wwwconjunto) e devem substituir os primeiros valores.

  • Parece funcionar em alguns testes e nenhum erro foi relatado, mas funcionará o tempo todo e para todos os valores?
  • Em vez disso, devemos substituir o arquivo de configuração diretamente?

Não foi possível encontrar uma resposta em nenhum documento, nem mesmo no php.net.

Anel Ø
fonte
Pelo menos nas distribuições baseadas no Debian / Ubuntu, o processo de atualização pergunta se deve manter os arquivos de configuração antigos ou instalar os atualizados do pacote. Ele instalará o novo arquivo de configuração com um sufixo para que você possa verificar as alterações dessa maneira. Presumo que outros gerenciadores de pacotes tenham um recurso semelhante. Portanto, acho que é uma questão de opinião. No entanto, ter definições de pool muito com o mesmo nome não parece que funcionaria no futuro também.
Tero Kilkanen

Respostas:

14

Não foi possível encontrar uma confirmação "oficial" de outra fonte, mas aqui estão alguns resultados depois de fazer uma pesquisa:

Analisando o código fonte php7.0-fpme, mais especificamente fpm-conf.c, parece que

  • o arquivo de configuração principal php-fpm.confé lido primeiro [ fpm_conf_load_ini_file ()],
  • todas as includediretivas são lidas em ordem, fornecendo uma lista de arquivos graças a glob () ,
  • cada um dos arquivos é analisado pelo mesmo fpm_conf_load_ini_file (),
  • uma entrada no arquivo substitui qualquer valor definido anteriormente,
  • qualquer novo includeterá uma chamada recursiva para a função de processamento inclui e
  • a função glob () classifica os nomes, por padrão (sem GLOB_NOSORTopção)

Portanto, podemos assumir - pelo menos nesta versão, mas é improvável que isso mude em breve, considerando o código atual - que é seguro organizar os pool.darquivos de configuração do diretório em ordem alfabética; qualquer valor gravado anteriormente sendo substituído por uma entrada com o mesmo nome lida depois.

Temos uma maneira limpa de lidar com arquivos de configuração php-fpm, mantendo os de distribuição intocados e adicionando arquivos personalizados com nome alfabeticamente maior que os compactados, que contêm as poucas opções que precisam ser alteradas.

Anel Ø
fonte
+1 por não alterar a configuração padrão. Sempre tenho problemas ao usá-lo no ambiente de produção, porque ele é revertido para os padrões durante a atualização.
Federico Galli
as substituições globais do FPM em pool.d podem ser usadas na [global]seção por exemplo emergency_restart_threshold. Testado em php7.1-fpm ubuntu (servidor 18).
hrvoj3e 9/01
Além disso, como o nome do pool padrão é wwwa única maneira de substituir, use nomes de arquivos pool.d como wwwsomethingou começando com x, you z.
hrvoj3e 9/01
2

Caso você possua algum arquivo como php-overrides.ini, copie-o para

/etc/php/7.0/fpm/conf.d/99-overrides.ini

Prefixo 99 é devido à ordem de execução

WhipsterCZ
fonte
conf.dsubstituições não podem substituir php-fpm.confvariáveis ​​(somente em pool.d/sub [global]) (observação para o futuro)
hrvoj3e 9/01