Habilitando o thread-safe php7.0.8 com o Apache2.4.18 e o Ubuntu 16.04.3 (desktop) para LAMP

0

Eu sou novo no Ubuntu e gostaria de ajudar a superar um bloco de configuração do LAMP com versões de software no título deste post (atual eu acredito que a partir de 11/2016). O problema parece ser uma incapacidade de configurar o Apache 2 com mods php7.

Estou usando pacotes padrão instalados usando o "tasksel install lamp-server", mas o pacote Apache2 baixado parece não ter sido instalado como configurado para mods do php7. Por exemplo, os arquivos "php7.0conf" e "php7.0load" não foram copiados para a pasta "etc / apache2 / mods-enabled". Usando o "libapache2-mod-php7.0" também não parece habilitar os mods do php7.0. A única instrução que encontrei para habilitar os mods do php7.0 é "a2enmodphp7.0", que copia os arquivos "conf" e "load" do php7 para a pasta "mods-enabled" do Apache2, mas o Apache2 falha ao reiniciar com o seguinte erro:

" Apache está executando um MPM encadeado, mas seu módulo PHP não é compilado para ser thread-safe. Você precisa recompilar o PHP. AH00013: Pré-configuração falhou | httpd.service: processo de controle encerrado, código = status exited = 1 "

Eu recebo o mesmo resultado baixando o Apache2 individualmente (usando "apt-get install apache2") seguido por "apt-get libapache2-mod-php7.0" e "a2enmodphp7.0".

Minha pesquisa mostra que isso é uma incompatibilidade conhecida entre o Apache2 e o php7. Um wiki no Apache diz que o Apache executa um MPM encadeado enquanto o PHP7 não é compilado para ser thread-safe. Ele sugere uma solução alternativa usando alterações manuais nos arquivos de configuração do Apache. Veja a Seção 4.3 do link .

Antes de começar a mexer nos bastidores, gostaria de perguntar à comunidade se existe uma solução mais preferida? Minha confiança nas pessoas que compõem os pacotes padrão me leva a esperar que eles construíssem em algo que os une.

    
por stuart_h 27.11.2016 / 01:24

1 resposta

0

Existem várias maneiras de conectar o PHP ao Apache. Essas são chamadas APIs do servidor ou SAPIs . Para usar o módulo do Apache, o mod_php é um desses SAPI. Mas alguns módulos PHP (por exemplo, o módulo MySQL) não suportam trabalhar com múltiplos threads ainda, eles não são threadsafe . O mod_php é um acoplamento relativamente estreito entre o Apache e o PHP, então você não pode usar um MPM de threading e nem módulos thread-safe do PHP ao mesmo tempo.

Você tem duas opções: A primeira opção é mudar para um MPM sem threading, sendo prefork . Isso provavelmente viria com uma penalidade de desempenho.

A segunda opção é mudar para um SAPI que não esteja tão bem acoplado, como fcgi ou PHP-FPM . Estes basicamente rodam como seus próprios daemons, então o Apache MPM não precisa se preocupar se algum módulo, digamos, do daemon do PHP-FPM é thread-safe ou não. Mas para configurá-los você precisa fazer mais do que apenas instalar um pacote com apt , então há uma curva de aprendizado.

    
por Henning Kockerbeck 28.11.2016 / 14:15