Servidor web · 6 min read · Dec 27, 2025

Instalando Nginx Con Soporte PHP5 (Y PHP-FPM) Y MySQL (LEMP) En Ubuntu 12.04 LTS

Nginx (pronunciado “engine x”) es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rica funcionalidad, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puedes instalar Nginx en un servidor Ubuntu 12.04 LTS con soporte para PHP5 (a través de PHP-FPM) y soporte para MySQL (LEMP = Linux + nginx (pronunciado “ e ngine x”) + MySQL + PHP).

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

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 ti, así que debes reemplazarlas donde sea apropiado.

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

sudo su

2 Instalando MySQL 5

Para instalar MySQL, ejecutamos

 apt-get install mysql-server mysql-client 

Se te pedirá que proporciones una contraseña para el usuario root de MySQL - esta contraseña es válida para el usuario root@localhost así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más tarde:

Nueva contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql Repite la contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql

3 Instalando Nginx

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

 apt-get install nginx

Inicia nginx después:

 /etc/init.d/nginx start

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

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

4 Instalando 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 características adicionales útiles para sitios de cualquier tamaño, especialmente 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 Configurando 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 (puedes aprender más sobre ella aquí: http://wiki.nginx.org/NginxFullExample y aquí: http://wiki.nginx.org/NginxFullExample2)

Primero (esto es opcional) ajusta el número de procesos de trabajo y establece el keepalive_timeout a un valor razonable:

| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |

Los hosts virtuales se definen en contenedores server {}. El vhost por defecto se define en el archivo /etc/nginx/sites-available/default - modifiquémoslo de la siguiente manera:

 vi /etc/nginx/sites-available/default

| [...] 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; } } [...] |

Descomenta ambas líneas listen para hacer que nginx escuche en el puerto 80 IPv4 y IPv6.

servername ; hace de esto un vhost por defecto que captura todo (por supuesto, también puedes especificar un nombre de host aquí como www.example.com).

He añadido index.php a la línea de índice. root /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 estrofa location ~ .php$ {}. Descoméntala para habilitarla. Ten en cuenta que he añadido la línea try_files $uri =404; para prevenir exploits de día cero (ver http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3). Alternativamente, si no deseas usar la línea try_files $uri =404;, puedes establecer cgi.fix_pathinfo = 0; en /etc/php5/fpm/php.ini (no olvides recargar PHP-FPM después).

Ahora guarda el archivo y recarga nginx:

/etc/init.d/nginx reload

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

vi /usr/share/nginx/www/info.php

| |

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

Como ves, PHP5 está funcionando, y está funcionando a través de FPM/FastCGI, como se muestra en la línea Server API. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP5. MySQL no está listado allí, lo que significa que aún no tenemos soporte para MySQL en PHP5.

6 Obteniendo Soporte MySQL En PHP5

Para obtener soporte MySQL en PHP, podemos instalar el paquete php5-mysql. Es una buena idea instalar algunos otros módulos de PHP5 también, ya que podrías necesitarlos para tus aplicaciones. Puedes buscar los módulos de PHP5 disponibles así:

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 opcode PHP gratuito y de código abierto para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de opcode PHP, como eAccelerator y APC. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu 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 recarga http://192.168.0.100/info.php en tu navegador y desplázate hacia abajo a la sección de módulos nuevamente. Ahora deberías encontrar muchos nuevos módulos allí, incluido el módulo MySQL:

7 Haciendo Que PHP-FPM Use Un Socket Unix

Por defecto, PHP-FPM está escuchando en el puerto 9000 en 127.0.0.1. También es posible hacer que PHP-FPM use un socket Unix, lo que evita la sobrecarga de TCP. Para hacer esto, abre /etc/php5/fpm/pool.d/www.conf…

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

… y haz que la línea listen se vea así:

| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |

Luego recarga PHP-FPM:

/etc/init.d/php5-fpm reload

A continuación, revisa tu configuración de nginx y todos tus vhosts y cambia la línea fastcgi_pass 127.0.0.1:9000; a fastcgi_pass unix:/tmp/php5-fpm.sock;, por ejemplo, así:

vi /etc/nginx/sites-available/default

| [...] 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; } [...] |

Finalmente, recarga nginx:

/etc/init.d/nginx reload

8 Scripts CGI/Perl

Si deseas servir scripts CGI/Perl con nginx, por favor lee este tutorial: Sirviendo Scripts CGI Con Nginx En Debian Squeeze/Ubuntu 11.04

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

9 Enlaces

Sobre El Autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultra-rápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También ha contribuido al libro de O’Reilly “Administración del Sistema Linux”.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.