Como configurar o Apache para executar o PHP como FastCGI no Ubuntu 12.04 via terminal?

33

Sou relativamente novo no mundo do gerenciamento / administração de servidor de linha de comando unix.

Muitos hosts com opções de administração do painel de controle permitem que você mude como o PHP é executado com uma opção simples.

As opções mais comuns são:

  • módulo do apache
  • aplicativo CGI
  • aplicativo FastCGI

Minha pergunta é simplesmente: como você muda isso via linha de comando? Eu sei que existem muitos arquivos de configuração para o apache.

A coisa mais próxima que eu encontrei é esta pergunta , no entanto, a estrutura do diretório não parece corresponder ao meu sistema operacional (Ubuntu 12.04).

Estou bastante perplexo com a forma como parece não haver um guia claro que eu possa descobrir que detalha esse processo para algo que parece ser tão comum. Perdoe-me se isso existe ... se assim for, por favor me aponte na direção certa.

    
por Evan Mattson 17.11.2013 / 03:33

4 respostas

19

Eu finalmente encontrei um bom tutorial voltado para isso. Vou descrever os passos que dei, pois já tinha instalado o meu LAMP stack, mas o tutorial completo pode ser encontrado aqui .

Nota para o novo:

No tutorial, ele começa mudando para o usuário root com:

sudo su

No meu caso, eu simplesmente prefixei os comandos sudo ao invés de trocar de usuário, então vou documentar meus passos dessa maneira.

Comece

Etapa 1: instalar o Apache Worker MPM (módulos multiprocessamento)

sudo apt-get install apache2-mpm-worker

Isso substitui o prefork que eu tinha instalado, que é o padrão ao instalar o Apache.

Etapa 2: instale o PHP5 e os módulos necessários

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

Neste ponto, você pode receber um erro ao instalar o 'libapache2-mod-fastcgi':

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Esta parte não está no tutorial acima

Para reconciliar isso, o repositório multiverse deve ser adicionado às fontes do apt.

Para fazer isso:

sudo nano /etc/apt/sources.list

Ao qual eu acrescentei as seguintes linhas:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precise neste caso refere-se à minha versão do Ubuntu " Pangolim Preciso ".

Agora salve essas alterações e volte ao terminal:

sudo apt-get update

e novamente:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

que irá (deve) funcionar agora.

Agora ative estes módulos do Apache:

sudo a2enmod actions fastcgi alias

reinicie o apache

sudo service apache2 restart

Etapa 3: configuração do Apache

Para fazer o Apache funcionar com o PHP-FPM, precisamos da seguinte configuração:

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>
  

Nota:

     

Se você estiver usando uma versão mais antiga do Apache (2.3.x ou anterior), deixe de fora a linha

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>
     

Você pode verificar sua versão instalada com o comando

apache2 -version

Você pode colocá-lo na configuração global do Apache (para que esteja habilitado para todos os vhosts), por exemplo, em /etc/apache2/conf.d/php5-fpm.conf (esse arquivo não existe, portanto você deve criá-lo) ou pode colocá-lo em cada vhost deve usar o PHP-FPM.

Eu escolho seguir a rota global, então:

sudo nano /etc/apache2/conf.d/php5-fpm.conf

cole o bloco de código acima e salve, saia. Este novo arquivo será automaticamente carregado pela configuração padrão do Apache, que carrega todos os arquivos no diretório /etc/apache2/conf.d/ .

reinicie o Apache:

sudo service apache2 restart

Agora crie o seguinte arquivo PHP na raiz do documento /var/www :

sudo nano /var/www/info.php

Adicionar:

<?php phpinfo();

salvar & amp; sair.

Agora chamamos esse arquivo em um navegador (por exemplo, http://your-server-ip/info.php )

Em API do servidor , na parte superior, você deve ver FPM/FastCGI .

Sucesso!

Para obter mais informações, como alterar o PHP-FPM para usar um soquete unix em vez da porta TCP padrão ou como configurá-lo para hosts virtuais individuais em vez de todos, consulte o tutorial de origem no topo.

    
por Evan Mattson 16.12.2013 / 16:43
46

Obrigado pelas respostas anteriores, eles me pegaram a maior parte do caminho, mas para fazer as coisas funcionarem eu tive que combinar instruções de alguns lugares, então pensei em escrever um conjunto completo de comandos.

FYI Estou executando o Ubuntu 14.04, Apache 2.4, e também tinha o modphp em execução por padrão, as instruções anteriores também deixaram de fora a necessidade de desabilitar o modphp.

Também encontrei o link muito informativo e direto.

Basta executar os seguintes comandos em um terminal, um após o outro.

Primeiro instale os pacotes necessários (deixo de fora o php5, pois isso supõe que já está instalado, adicione-o de volta para uma instalação pela primeira vez). Além disso, note que a partir do Apache 2.4 você pode usar o evento-mpm em vez de o trabalhador ver link . Meu exemplo mostra worker, mas apenas substitua a palavra worker por event se você preferir usar isso.

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

Agora ative os mods necessários e desative os que não precisar.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Crie o arquivo php5.fcgi e dê ao servidor web permissão para usá-lo.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Crie uma configuração global para o php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf

cole o seguinte (usaremos um soquete em vez do endereço IP)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Ativar o conf do php5-fpm

sudo a2enconf php5-fpm

Reinicie o apache e o fpm

sudo service apache2 restart && sudo service php5-fpm restart

De acordo com outras instruções, cole o seguinte em um novo arquivo php navegável no seu servidor web.

<?php phpinfo();

Abra o arquivo que você acabou de editar em um navegador da Web. Se você vir "FPM / FastCGI" ao lado de API do servidor, agora está servindo o PHP com o FastCGI!

    
por JDawgg 23.09.2014 / 00:01
1

No Ubuntu 14.04 depois de seguir os passos da resposta aceita, edite /etc/apache2/conf-available/php5-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

Em seguida, execute

#sudo a2enconf php5-fpm
#sudo apache2 restart
    
por marcanuy 21.09.2014 / 17:34
0

No caso de alguém estar fazendo isso no Ubuntu 16.04 e ter feito downgrade do php 7 para o php 5.6 (Ondrej), você deve substituir algumas linhas (com base na resposta do JDawgg):

sudo apt-get instala o libapache2-mod-fastcgi php5-fpm para:

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork para:

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-available/php5-fpm.conf para:

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

O processo de instalação do php5.6-fpm já criou o arquivo, portanto não há necessidade de criar um. No entanto, eu removi todo o texto existente nesse arquivo como era para o mod_php5.

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Eu alterei o caminho de /var/run/php5-fpm.sock para /var/run/php/php5.6-fpm.sock como o arquivo estava localizado lá.

sudo a2enconf php5-fpm para:

sudo a2enconf php5.6-fpm

serviço sudo apache2 restart & amp; & amp; sudo service php5-fpm reiniciar para:

sudo service apache2 restart && sudo service php5.6-fpm restart

Espero que isso ajude outros novatos como eu:)

    
por Nazq 23.10.2016 / 01:35