GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 12.04 LTS

Nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rico conjunto de funciones, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puede instalar Nginx en un servidor Ubuntu 12.04 LTS con soporte para PHP5 (a través de PHP-FPM) y soporte para MySQL (LEMP =L inux + nginx (pronunciado "e motor x") + M ySQL + P HP).

¡No emito ninguna garantía de que esto funcione para usted!

1 nota preliminar

En este tutorial utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.

Estoy ejecutando todos los pasos de este tutorial con privilegios de root, así que asegúrese de haber iniciado sesión como root:

sudo su

2 Instalación de MySQL 5

Para instalar MySQL, ejecutamos

 apt-get install mysql-server mysql-client 

Se le pedirá que proporcione una contraseña para el usuario root de MySQL; esta contraseña es válida para el usuario [email protected] así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:

Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repetir la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword

3 Instalación de Nginx

Nginx está disponible como paquete para Ubuntu 12.04 que podemos instalar de la siguiente manera:

 apt-get install nginx

Inicie nginx después:

 /etc/init.d/nginx start

Escriba la dirección IP o el nombre de host de su servidor web en un navegador (por ejemplo, http://192.168.0.100), y debería ver la siguiente página:

La raíz del documento nginx predeterminada en Ubuntu 12.04 es /usr/share/nginx/www.

4 Instalación de PHP5

Podemos hacer que PHP5 funcione en nginx a través de PHP-FPM (PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas funciones adicionales útiles para sitios de cualquier tamaño, especialmente los sitios más concurridos) que instalamos de la siguiente manera:

 apt-get install php5-fpm

PHP-FPM es un proceso daemon (con el script de inicio /etc/init.d/php5-fpm) que ejecuta un servidor FastCGI en el puerto 9000.

5 Configuración de nginx

La configuración de nginx está en /etc/nginx/nginx.conf que abrimos ahora:

 vi /etc/nginx/nginx.conf

La configuración es fácil de entender (puede obtener más información aquí:http://wiki.nginx.org/NginxFullExample y aquí:http://wiki.nginx.org/NginxFullExample2)

Primero (esto es opcional) ajuste la cantidad de procesos de trabajo y establezca el tiempo de espera de keepalive_time en un valor razonable:

Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual predeterminado se define en el archivo /etc/nginx/sites-disponible/default. Modifiquémoslo de la siguiente manera:

 vi /etc/nginx/sites-available/default
[...]
worker_processes  4;
[...]
    keepalive_timeout   2;
[...]

Descomente ambas líneas de escucha para hacer que nginx escuche en el puerto 80 IPv4 y IPv6.

nombre del servidor _; lo convierte en un vhost catchall predeterminado (por supuesto, también puede especificar un nombre de host aquí como www.example.com).

He agregado index.php a la línea de índice. raíz /usr/share/nginx/www; significa que la raíz del documento es el directorio /usr/share/nginx/www.

La parte importante para PHP es la ubicación ~ \.php$ {} estrofa. Descoméntalo para habilitarlo. Tenga en cuenta que agregué la línea try_files $uri =404; para evitar exploits de día cero (ver http://wiki.nginx.org/Pitfalls#Passing_Unected_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3). Alternativamente, si no desea utilizar try_files $uri =404; línea, puede configurar cgi.fix_pathinfo =0; en /etc/php5/fpm/php.ini (no olvide volver a cargar PHP-FPM después).

Ahora guarde el archivo y vuelva a cargar nginx:

/etc/init.d/nginx reload

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

vi /usr/share/nginx/www/info.php
[...]
server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }

        # Only for nginx-naxsi : process denied requests
        #location /RequestDenied {
                # For example, return an error code
                #return 418;
        #}

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/www;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
[...]

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.0.100/info.php):

Como puede ver, PHP5 funciona y funciona a través de FPM/FastCGI, como se muestra en la línea API del servidor. Si se desplaza hacia abajo, verá todos los módulos que ya están habilitados en PHP5. MySQL no se encuentra en la lista, lo que significa que aún no tenemos compatibilidad con MySQL en PHP5.

6 Obtener compatibilidad con MySQL en PHP5

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php5-mysql. Es una buena idea instalar algunos otros módulos de PHP5, ya que podría necesitarlos para sus aplicaciones. Puede buscar módulos PHP5 disponibles como este:

apt-cache search php5

Elige los que necesites e instálalos así:

 apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Xcache es un caché de código de operación de PHP gratuito y abierto para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de código de operación de PHP, como eAccelerator y APC. Se recomienda encarecidamente tener uno de estos instalados para acelerar su página PHP.

Xcache se puede instalar de la siguiente manera:

apt-get install php5-xcache

Ahora recarga PHP-FPM:

/etc/init.d/php5-fpm reload

Ahora vuelva a cargar http://192.168.0.100/info.php en su navegador y desplácese hacia abajo hasta la sección de módulos nuevamente. Ahora debería encontrar muchos módulos nuevos allí, incluido el módulo MySQL:

7 Hacer que PHP-FPM use un socket Unix

De forma predeterminada, PHP-FPM escucha en el puerto 9000 en 127.0.0.1. También es posible hacer que PHP-FPM use un socket Unix que evita la sobrecarga de TCP. Para ello, abra /etc/php5/fpm/pool.d/www.conf...

vi /etc/php5/fpm/pool.d/www.conf

... y haz que la línea de escucha tenga el siguiente aspecto:

<?php
phpinfo();
?>

Luego recarga PHP-FPM:

/etc/init.d/php5-fpm reload

A continuación, revise su configuración de nginx y todos sus hosts virtuales y cambie la línea fastcgi_pass 127.0.0.1:9000; a fastcgi_pass unix:/tmp/php5-fpm.sock;, p. así:

vi /etc/nginx/sites-available/default
[...]
;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock
[...]

Finalmente recargar nginx:

/etc/init.d/nginx reload

8 secuencias de comandos CGI/Perl

Si desea servir scripts CGI/Perl con nginx, lea este tutorial:Sirviendo scripts CGI con Nginx en Debian Squeeze/Ubuntu 11.04

La forma recomendada es usar fcgiwrap (capítulo 4).

9 Enlaces

  • nginx:http://nginx.net/
  • Wiki de nginx:http://wiki.codemongers.com/Main
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • Ubuntu:http://www.ubuntu.com/

Sobre el autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultrarrápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los principales desarrolladores de ISPConfig (desde 2000). También ha contribuido al libro de O'Reilly "Administración del sistema Linux".


Ubuntu
  1. Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 14.04 LTS

  2. Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Ubuntu 14.04LTS (LAMP)

  3. Instalación de Lighttpd con soporte PHP5 (PHP-FPM) y MySQL en Ubuntu 14.04LTS

  4. Cómo instalar Nginx con PHP5 y MySQL en Ubuntu 11.10

  5. Instale Prosper202 con Nginx, MySQL y PHP-FPM en Ubuntu

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Ubuntu 13.04 (LAMP)

Instalación de Nginx con compatibilidad con PHP5 y MySQL en Ubuntu 8.10

Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Debian Wheezy

Instalación de Lighttpd con soporte PHP5 (PHP-FPM) y MySQL en Debian Wheezy

Instalación de Nginx con soporte PHP5 (y PHP-FPM) y MySQL en CentOS 6.4

Instalación de Nginx con soporte PHP5 (y PHP-FPM) y MySQL en Fedora 19

    [...]
            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass unix:/tmp/php5-fpm.sock;
                    fastcgi_index index.php;
                    include fastcgi_params;
            }
    [...]