Servidor web · 8 min read · Oct 13, 2025
Instalación de Nginx con PHP 7 y MySQL 5.7 (LEMP) en Ubuntu 16.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 16.04 con soporte para PHP 7 (a través de PHP-FPM) y soporte para MySQL 5.7 (LEMP = Linux + nginx (pronunciado “ e ngine x”) + MySQL + PHP).
1 Nota Preliminar
En este tutorial, utilizo el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado.
Estoy ejecutando todos los pasos en este tutorial con privilegios de root, así que asegúrate de haber iniciado sesión como root:
sudo -s2 Instalación de MySQL 5.7
Para instalar MySQL, ejecutamos:
apt-get -y install mysql-server mysql-clientSe 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ñarootsql Repetir contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql

Para asegurar el servidor de base de datos y eliminar el usuario anónimo y la base de datos de prueba, ejecuta el comando mysql_secure_installation.
mysql_secure_installationSe te harán estas preguntas:
root@server1:~# mysql_secure_installationAsegurando la implementación del servidor MySQL.Ingresa la contraseña para el usuario root: <-- Ingresa la contraseña de root de MySQLEl PLUGIN DE VALIDACIÓN DE CONTRASEÑA se puede usar para probar contraseñas
y mejorar la seguridad. Verifica la fortaleza de la contraseña
y permite a los usuarios establecer solo aquellas contraseñas que son
suficientemente seguras. ¿Te gustaría configurar el plugin de VALIDACIÓN DE CONTRASEÑA?Presiona y|Y para Sí, cualquier otra tecla para No: <-- Presiona y si deseas esta función o presiona Enter de lo contrario.
Usando la contraseña existente para root.
¿Cambiar la contraseña para root? ((Presiona y|Y para Sí, cualquier otra tecla para No) : <-- Presiona enter... omitiendo.
Por defecto, una instalación de MySQL tiene un usuario anónimo,
permitiendo que cualquiera inicie sesión en MySQL sin tener que tener
una cuenta de usuario creada para ellos. Esto está destinado solo para
testing, y para hacer que la instalación sea un poco más fluida.
Deberías eliminarlos antes de pasar a un entorno de producción.¿Eliminar usuarios anónimos? (Presiona y|Y para Sí, cualquier otra tecla para No) : <-- y
Éxito.
Normalmente, solo se debería permitir que root se conecte desde
'localhost'. Esto asegura que alguien no pueda adivinar la
contraseña de root desde la red.¿Deshabilitar el inicio de sesión remoto de root? (Presiona y|Y para Sí, cualquier otra tecla para No) : <-- y
Éxito.Por defecto, MySQL viene con una base de datos llamada 'test' que
cualquiera puede acceder. Esto también está destinado solo para testing,
y debería ser eliminado antes de pasar a un entorno de producción.
¿Eliminar la base de datos de prueba y el acceso a ella? (Presiona y|Y para Sí, cualquier otra tecla para No) : <-- y
- Eliminando la base de datos de prueba...
Éxito.- Eliminando privilegios en la base de datos de prueba...
Éxito.Recargar las tablas de privilegios asegurará que todos los cambios
realizados hasta ahora surtan efecto de inmediato.¿Recargar tablas de privilegios ahora? (Presiona y|Y para Sí, cualquier otra tecla para No) : <-- y
Éxito.¡Todo listo!MySQL está asegurado ahora.
3 Instalación de Nginx
En caso de que ya hayas instalado Apache2, primero elimínalo con estos comandos y luego instala nginx:
service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2Nginx está disponible como un paquete para Ubuntu 16.04 que podemos instalar.
apt-get -y install nginxInicia nginx después:
service nginx startEscribe la dirección IP o el nombre de host de tu servidor web en un navegador (por ejemplo, http://192.168.1.100), y deberías ver la siguiente página:

La raíz del documento predeterminado de nginx en Ubuntu 16.04 es /var/www/html.
4 Instalación de PHP 7
Podemos hacer que PHP 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 ocupados) que instalamos de la siguiente manera:
apt-get -y install php7.0-fpmPHP-FPM es un proceso daemon (con el script de inicio php7.0-fpm) que ejecuta un servidor FastCGI en el socket /run/php/php7.0-fpm.sock.
5 Configurando nginx
La configuración de nginx está en /etc/nginx/nginx.conf que abrimos ahora:
nano /etc/nginx/nginx.confLa 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 keepalive_timeout a un valor razonable:
[...]
keepalive_timeout 2;
[...]Los hosts virtuales se definen en contenedores server {}. El vhost predeterminado está definido en el archivo /etc/nginx/sites-available/default - modifiquémoslo de la siguiente manera:
nano /etc/nginx/sites-available/default[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
# Configuración SSL
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Nota: Deberías deshabilitar gzip para el tráfico SSL.
# Ver: https://bugs.debian.org/773332
#
# Infórmate sobre ssl_ciphers para asegurar una configuración segura.
# Ver: https://bugs.debian.org/765782
#
# Certificados autofirmados generados por el paquete ssl-cert
# ¡No los uses en un servidor de producción!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Agrega index.php a la lista si estás usando PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# Primer intento de servir la solicitud como archivo, luego
# como directorio, luego volver a mostrar un 404.
try_files $uri $uri/ =404;
}
# pasa los scripts PHP al servidor FastCGI escuchando en 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Con php7.0-cgi solo:
# fastcgi_pass 127.0.0.1:9000;
# Con php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# denegar acceso a archivos .htaccess, si la raíz del documento de Apache
# coincide con la de nginx
#
location ~ /\.ht {
deny all;
}
}
[...]servername ; hace de esto un vhost predeterminado que captura todo (por supuesto, también puedes especificar un nombre de host aquí como www.example.com).
root /var/www/html; significa que la raíz del documento es el directorio /var/www/html.
La parte importante para PHP es la estrofa location ~ .php$ {}. Descoméntala para habilitarla.
Ahora guarda el archivo y recarga nginx:
service nginx reloadA continuación, abre /etc/php/7.0/fpm/php.ini…
nano /etc/php/7.0/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 ajustarse a la especificación. Un ajuste
; de cero hace que PHP se comporte como antes. El valor predeterminado es 1. Deberías 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 php7.0-fpm reloadAhora crea el siguiente archivo PHP en la raíz del documento /var/www/html:
nano /var/www/html/info.phpAhora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.1.100/info.php):

Como ves, PHP 7 está funcionando, y está funcionando a través de FPM/FastCGI, como se muestra en la línea del API del servidor. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP. MySQL no está listado allí lo que significa que aún no tenemos soporte para MySQL en PHP.
6 Obteniendo Soporte de MySQL en PHP 7
Para obtener soporte de MySQL en PHP, podemos instalar el paquete php7.0-mysql. Es una buena idea instalar algunos otros módulos de PHP también, ya que podrías necesitarlos para tus aplicaciones. Puedes buscar módulos de PHP disponibles así:
apt-cache search php7.0Elige los que necesites e instálalos así:
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettextAPCu es una extensión para el módulo Opcache de PHP que viene con PHP 7, añade algunas características de compatibilidad para software que soporta la caché APC (por ejemplo, plugins de caché de Wordpress).
APCu se puede instalar de la siguiente manera:
apt-get -y install php-apcuAhora recarga PHP-FPM:
service php7.0-fpm reloadAhora recarga http://192.168.1.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í, incluyendo el módulo de MySQL:

7 Haciendo que PHP-FPM use una Conexión TCP
Por defecto, PHP-FPM está escuchando en el socket /var/run/php/php7.0-fpm.sock. También es posible hacer que PHP-FPM use una conexión TCP. Para hacer esto, abre /etc/php/7.0/fpm/pool.d/www.conf…
nano /etc/php/7.0/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:
php7.0-fpm reloadA continuación, revisa tu configuración de nginx y todos tus vhosts y cambia la línea fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; a fastcgi_pass 127.0.0.1:9000;, por ejemplo, así:
nano /etc/nginx/sites-available/default[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Con php7.0-cgi solo:
fastcgi_pass 127.0.0.1:9000;
# Con php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
[...]Finalmente, recarga nginx:
service nginx reloadEso es todo. El servidor Nginx LEMP está instalado.
8 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/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.