Servidor web · 6 min read · Jan 23, 2026

Instalación de Nginx Con Soporte PHP5 (Y PHP-FPM) Y MySQL (LEMP) En Ubuntu 14.04 LTS

Nginx (pronunciado “engine x”) es un servidor HTTP de alto rendimiento, gratuito y de código abierto. Nginx es conocido por su estabilidad, conjunto de características ricas, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puedes instalar Nginx en un servidor Ubuntu 14.04 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 funcionará 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 Instalación de 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 adelante:

Nueva contraseña para el usuario “root” de MySQL: <– tucontraseñadeMySQL Repetir contraseña para el usuario “root” de MySQL: <– tucontraseñadeMySQL

3 Instalación de Nginx

Nginx está disponible como un paquete para Ubuntu 14.04 que podemos instalar. Como Apache2 está instalado por defecto, lo eliminaremos primero y luego instalaremos nginx:

service apache2 stop update-rc.d -f apache2 remove apt-get remove apache2

apt-get install nginx

Inicia nginx después:

service 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 14.04 es /usr/share/nginx/html.

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 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 php5-fpm) que ejecuta un servidor FastCGI en el socket /var/run/php5-fpm.sock.

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 (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 [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.php index.html index.htm; # Hacer que el sitio sea accesible desde http://localhost/ server_name _; location / { # Primer intento de servir la solicitud como archivo, luego # como directorio, luego volver a mostrar un 404. try_files $uri $uri/ /index.html; # Descomentar para habilitar naxsi en esta ubicación # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; allow ::1; deny all; } # Solo para nginx-naxsi utilizado con nginx-naxsi-ui : procesar solicitudes denegadas #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirigir las páginas de error del servidor a la página estática /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pasar los scripts PHP al servidor FastCGI que escucha en 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTA: Debes tener "cgi.fix_pathinfo = 0;" en php.ini # Con php5-cgi solo: #fastcgi_pass 127.0.0.1:9000; # Con php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } # denegar el acceso a archivos .htaccess, si la raíz del documento de Apache # coincide con la de nginx # location ~ \/\.ht { deny all; } } [...] |

Descomenta ambas líneas de 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/html; significa que la raíz del documento es el directorio /usr/share/nginx/html.

La parte importante para PHP es el bloque location ~ .php$ {}. Descoméntalo para habilitarlo. 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).

Ahora guarda el archivo y recarga nginx:

service nginx reload

A continuación, abre /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… y establece cgi.fix_pathinfo=0:

| [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. PHP's ; el comportamiento anterior era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender ; qué es PATH_INFO. Para más información sobre PATH_INFO, consulta las especificaciones de cgi. Establecer ; esto en 1 hará que PHP CGI corrija sus rutas para conformarse a la especificación. Un ajuste ; de cero hace que PHP se comporte como antes. El valor por defecto es 1. Debes corregir tus scripts ; para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

Recarga PHP-FPM:

service php5-fpm reload

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

vi /usr/share/nginx/html/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 Obtener Soporte de 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 también, ya que podrías necesitarlos para tus aplicaciones. Puedes buscar 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

APC es un caché de opcodes de 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 opcodes de PHP, como eAccelerator y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP.

APC se puede instalar de la siguiente manera:

apt-get install php-apc

Ahora recarga PHP-FPM:

service 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 de MySQL:

7 Hacer Que PHP-FPM Use Una Conexión TCP

Por defecto, PHP-FPM está escuchando en el socket /var/run/php5-fpm.sock. También es posible hacer que PHP-FPM use una conexión 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 como sigue:

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

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrate de usar un puerto que no esté en uso en tu sistema.

Luego recarga PHP-FPM:

php5-fpm reload

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

vi /etc/nginx/sites-available/default

| [...] location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTA: Debes tener "cgi.fix_pathinfo = 0;" en php.ini # Con php5-cgi solo: fastcgi_pass 127.0.0.1:9000; # Con php5-fpm: #fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } [...] |

Finalmente, recarga nginx:

service nginx reload

8 Scripts CGI/Perl

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

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

9 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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