¿Cómo configurar Apache para ejecutar PHP como FastCGI en Ubuntu 12.04 a través de la terminal?

35

Soy relativamente nuevo en el mundo de la administración / administración del servidor web de línea de comandos de Unix.

Muchos hosts con opciones de administración del panel de control le permiten cambiar cómo se ejecuta PHP con una opción simple.

Las opciones más comunes son:

  • módulo apache
  • Aplicación CGI
  • Aplicación FastCGI

Mi pregunta es simplemente, ¿cómo se cambia esto a través de la línea de comando? Sé que hay muchos archivos de configuración para apache.

Lo más parecido que he encontrado es esta pregunta , sin embargo, la estructura del directorio no parece coincidir con mi sistema operativo (Ubuntu 12.04).

Estoy bastante desconcertado porque parece que no hay una guía clara que pueda encontrar que detalla este proceso para algo que parece ser tan común. Perdóname si esto existe ... si es así, por favor apúntame en la dirección correcta.

Evan Mattson
fuente
Lo más parecido que he encontrado es esta pregunta en SO That website no es Stack Overflow.
ta.speot.is
1
Esto en fastcgi lo explica bastante bien.
1
@ ta.speot.es perdón, súplica . . Gracias Matt, por supuesto que miré en fastcgi.com, pero encontré esas instrucciones un poco difíciles de seguir.
Evan Mattson el
@ ta.speot.is, error tipográfico simple. Se refería a "SE" no "SO".
Pacerier

Respuestas:

49

Gracias por las respuestas anteriores me dieron la mayor parte del camino, pero para que las cosas funcionaran tuve que combinar instrucciones de algunos lugares, así que pensé en escribir un conjunto completo de comandos.

FYI, estoy ejecutando Ubuntu 14.04, Apache 2.4, y también tenía modphp ejecutándose de forma predeterminada, las instrucciones anteriores también omitieron la necesidad de deshabilitar modphp.

También encontré que http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ es muy informativo y directo.

Simplemente ejecute los siguientes comandos en un terminal uno tras otro.

Primero instale los paquetes necesarios (omito php5 ya que esto supone que ya está instalado, agréguelo nuevamente para la primera instalación). También tenga en cuenta que desde Apache 2.4 en adelante puede usar el evento-mpm en lugar de trabajador, consulte http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Mi ejemplo muestra trabajador, pero solo reemplaza la palabra trabajador con evento si prefieres usar eso.

sudo apt-get install apache2-mpm-worker

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

Ahora habilite las modificaciones que necesita y desactive las que no.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Cree el archivo php5.fcgi y otorgue permiso al servidor web para usarlo.

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

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

Crear una configuración global para php5-fpm

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

pegue lo siguiente (usaremos un socket en lugar de una dirección 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 la configuración php5-fpm

sudo a2enconf php5-fpm

Reiniciar apache y fpm

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

Según otras instrucciones, pegue lo siguiente en un nuevo archivo php explorable en su servidor web.

<?php phpinfo();

Abra el archivo que acaba de editar en un navegador web. Si ve "FPM / FastCGI" junto a la API del servidor, ¡ahora está sirviendo PHP con FastCGI!

JDawgg
fuente
44
Este es un salvavidas. Las instrucciones para el apache anterior no funcionaban en Ubuntu 14.04 y apache 2.4; pero este funcionó a las mil maravillas. +100 !!
Bhavin Doshi
Seguí esto exactamente, pero recibo el error 'No tienes permiso para acceder a /php5.fcgi/index' ... Y en el registro de errores, 'cliente denegado por la configuración del servidor: / usr / lib / cgi-bin /php5.fcgi '... ¿Alguna idea?
Just Lucky Really
Lo descubrí ... Estaba usando la antigua configuración de 'negar pedido, permitir' para root por alguna razón ... Todo solucionado ahora: D
Just Lucky Really
Recibí el siguiente error después de la instalación de los paquetes y la configuración "apache2: error de sintaxis en la línea 216 de /etc/apache2/apache2.conf: error de sintaxis en la línea 9 de /etc/apache2/conf-enabled/php5-fpm.conf: esperado </Directory> pero vi </IfModule> "
Farooq
Hizo un GitHub Gist para este gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

Finalmente encontré un buen tutorial orientado a hacer precisamente esto. Voy a describir los pasos que tomé ya que tenía mi pila LAMP instalada, pero el tutorial completo se puede encontrar aquí .

Nota para lo nuevo:

En el tutorial, comienza cambiando al usuario raíz con:

sudo su

En mi caso, simplemente prefijo esos comandos en sudolugar de cambiar de usuario, por lo que documentaré mis pasos de esa manera.

Empezar

Paso uno: Instale el Apache Worker MPM (Módulos de procesamiento múltiple)

sudo apt-get install apache2-mpm-worker

Esto reemplaza el prefork que había instalado, que es el predeterminado al instalar Apache.

Paso 2: instale PHP5 y los módulos necesarios

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

En este punto, puede obtener un error al instalar '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 no está en el tutorial anterior

Para conciliar esto, el multiverserepositorio debe agregarse a las fuentes apt.

Para hacer esto:

sudo nano /etc/apt/sources.list

A lo que adjunté las siguientes líneas:

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

preciseen este caso se refiere a mi versión de Ubuntu " Precise Pangolin ".

Así que ahora, guarde esos cambios y regrese a la terminal:

sudo apt-get update

y otra vez:

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

que ahora (debería) funcionar.

Ahora habilite estos módulos de Apache:

sudo a2enmod actions fastcgi alias

reiniciar apache

sudo service apache2 restart

Paso 3: configuración de Apache

Para hacer que Apache funcione con PHP-FPM, necesitamos la siguiente configuración:

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

Si está utilizando una versión anterior de Apache (2.3.xo anterior), omita la línea

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

Puede verificar su versión instalada con el comando

apache2 -version

Puede ponerlo en la configuración global de Apache (por lo que está habilitado para todos los vhosts), por ejemplo en /etc/apache2/conf.d/php5-fpm.conf(este archivo no existe, por lo que debe crearlo), o puede colocarlo en cada vhost que debería usar PHP-FPM.

Elijo ir a la ruta global, entonces:

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

pegue en el bloque de código anterior y guarde, salga. Este nuevo archivo se cargará automáticamente mediante la configuración predeterminada de Apache que carga todos los archivos en el /etc/apache2/conf.d/directorio.

reiniciar Apache:

sudo service apache2 restart

Ahora cree el siguiente archivo PHP en la raíz del documento /var/www:

sudo nano /var/www/info.php

Añadir:

<?php phpinfo();

guardar la salida.

Ahora llamamos a ese archivo en un navegador (por ejemplo http://your-server-ip/info.php)

En la API del servidor en la parte superior, debería ver FPM/FastCGI.

¡Éxito!

Para obtener más información sobre cómo cambiar PHP-FPM para usar un socket Unix en lugar del puerto TCP predeterminado o cómo configurarlo para hosts virtuales individuales en lugar de todos ellos, consulte el tutorial de origen vinculado en la parte superior.

Evan Mattson
fuente
Tuve que agregar esto antes </IfModule>: <Directory / usr / lib / cgi-bin> Requerir todo otorgado </Directory>
Rimu Atkinson
@RimuAtkinson es correcto, por defecto todos los directorios estarán prohibidos en las versiones más recientes, por lo que tendrá que otorgar acceso específicamente al directorio cgi-bin. Esto debería agregarse a la respuesta, ya que sin ella obtendrás un 403.
johnrom
Gracias por este tutorial! Tenga en cuenta que la Require all grantedcosa solo es necesaria desde Apache 2.4. Si lo pongo en el archivo de configuración con Apache 2.2, falla.
Leemes
He añadido una nota. (Siéntase libre de editarlo; es su publicación.)) Para más detalles, consulte stackoverflow.com/a/22040167/592323
leemes
1
Esta respuesta no funciona en ubuntu 14.04. Consulte la respuesta de JDawgg para hacerlo en 14.04.
Bhavin Doshi
1

En Ubuntu 14.04 después de seguir los pasos de la respuesta aceptada, 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>

Luego ejecuta

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

En caso de que alguien esté haciendo esto en Ubuntu 16.04 y haya bajado de php 7 a php 5.6 (Ondrej), debe reemplazar algunas líneas (según la respuesta 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

El proceso de instalación de php5.6-fpm ya creó el archivo, por lo que no es necesario crear uno. Sin embargo, eliminé todo el texto existente en ese archivo ya que estaba destinado a 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>

Cambié la ruta de /var/run/php5-fpm.sock a /var/run/php/php5.6-fpm.sock ya que el archivo estaba ubicado allí.

sudo a2enconf php5-fpm para:

sudo a2enconf php5.6-fpm

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

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

Espero que esto ayude a otros novatos como yo :)

Nazq
fuente