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

35

Eu sou relativamente novo no mundo do gerenciamento / administração de servidores web da linha de comando unix.

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

As opções mais comuns são:

  • módulo apache
  • Aplicação CGI
  • Aplicação FastCGI

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

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

Estou perplexo com o fato de não parecer um guia claro que eu possa achar que detalha esse processo para algo que parece ser tão comum. Perdoe-me se isso existe ... se sim, por favor, aponte-me na direção certa.

Evan Mattson
fonte
A coisa mais próxima que encontrei é essa pergunta no SO. Esse site não é Stack Overflow.
ta.speot.is
1
Isso no fastcgi explica muito bem.
1
@ ta.speot.é perdoável, por favor . . Obrigado Matt, é claro que eu olhei no fastcgi.com, mas achei essas instruções um pouco difíceis de seguir.
precisa
@ ta.speot.is, erro de digitação simples. Ele quis dizer "SE", não "SO".
Pacerier

Respostas:

49

Obrigado pelas respostas anteriores, eles me ajudaram bastante, 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.

Para sua informação, 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 desativar o modphp.

Também achei http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ 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 ele assume que ele já está instalado, adicione-o novamente para uma instalação inicial). Observe também a partir do Apache 2.4, você pode usar o event-mpm em vez de worker, consulte http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Meu exemplo mostra worker, mas substitua a palavra worker por event, se você preferir usá-lo.

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 são necessários.

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 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>

Habilite o php5-fpm conf

sudo a2enconf php5-fpm

Reinicie o apache e o fpm

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

Conforme outras instruções, cole o seguinte em um novo arquivo php navegável no servidor da web.

<?php phpinfo();

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

JDawgg
fonte
4
Este é um salva-vidas. As instruções para o apache mais antigo não funcionaram no Ubuntu 14.04 e no apache 2.4; mas este funcionou como um encanto. +100 !!
Bhavin Doshi
Eu segui exatamente isso, mas recebo o erro 'Você não tem permissão para acessar /php5.fcgi/index' ... E no log de erros, 'cliente negado pela configuração do servidor: / usr / lib / cgi-bin /php5.fcgi '... Alguma idéia?
Just Lucky Realmente
Entendi ... Eu estava usando a antiga configuração 'negar ordem, permitir' para o root por algum motivo ... Tudo corrigido agora: D
Just Lucky Really
Recebi o seguinte erro após a instalação dos pacotes e da configuração "apache2: erro de sintaxe na linha 216 do /etc/apache2/apache2.conf: Erro de sintaxe na linha 9 do /etc/apache2/conf-enabled/php5-fpm.conf: esperado </Directory> mas viu </IfModule> "
Farooq 23/04
Fez uma GitHub Gist para este gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

Finalmente encontrei um bom tutorial voltado para fazer exatamente isso. Vou descrever as etapas que eu segui, já que minha pilha LAMP foi instalada, mas o tutorial completo pode ser encontrado aqui .

Nota para o novo:

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

sudo su

No meu caso, simplesmente prefixei esses comandos em sudovez de alternar entre usuários, portanto, documentarei meus passos dessa maneira.

Início

Etapa 1: Instalar o MPM do Apache Worker (Módulos de vários processos)

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 multiverserepositório deve ser adicionado às fontes apt.

Para fazer isso:

sudo nano /etc/apt/sources.list

Ao qual anexei 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

preciseneste caso refere-se à minha versão do Ubuntu " Precise Pangolin ".

Então agora, salve essas alterações e volte ao terminal:

sudo apt-get update

e de novo:

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

que irá (deve) agora funcionar.

Agora ative estes módulos 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 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 seja ativado para todos os vhosts), por exemplo, em /etc/apache2/conf.d/php5-fpm.conf(este arquivo não existe, portanto, você deve criá-lo) ou pode ser colocado em cada host que deve usar o PHP-FPM.

Eu escolho seguir a rota global, então:

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

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

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();

saída segura.

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 eles, consulte o tutorial de origem vinculado na parte superior.

Evan Mattson
fonte
Eu tive que adicionar isso antes </ IfModule>: <Directory / usr / lib / cgi-bin> Exigir todos concedido </ Directory>
Rimu Atkinson
@RimuAtkinson está correto, por padrão todos os diretórios serão proibidos em versões mais recentes, então você terá que conceder especificamente acesso ao diretório cgi-bin. Isso deve ser adicionado à resposta, pois sem ela você receberá 403. #
johnrom 15/14/14
Obrigado por este tutorial! Observe que a Require all grantedcoisa é necessária apenas desde o Apache 2.4. Se eu colocá-lo no arquivo de configuração do Apache 2.2, ele falhará.
Leem
Eu adicionei uma nota. (Sinta-se livre para bem edit-lo, é o seu post;).) Para mais informações, consulte stackoverflow.com/a/22040167/592323
leemes
1
Esta resposta não funciona no ubuntu 14.04. Consulte a resposta de JDawgg para fazê-lo em 14.04.
Bhavin Doshi
1

No Ubuntu 14.04, após executar as etapas da resposta aceita, edite o /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>

Então execute

#sudo a2enconf php5-fpm
#sudo apache2 restart
marcanuy
fonte
0

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

sudo apt-get install 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, então não há necessidade de criar um. No entanto, eu removi todo o texto existente nesse arquivo, pois ele era destinado ao 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>

Alterei o caminho de /var/run/php5-fpm.sock para /var/run/php/php5.6-fpm.sock, pois o arquivo estava localizado lá.

sudo a2enconf php5-fpm para:

sudo a2enconf php5.6-fpm

serviço sudo apache2 restart && serviço sudo php5-fpm restart para:

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

Espero que isso ajude outros iniciantes como eu :)

Nazq
fonte