🌐 Instalar Nginx + PHP-FPM en un VPS#
Aprende a instalar y configurar Nginx con PHP-FPM en tu VPS para crear un servidor web de alto rendimiento. Esta configuración es ideal para WordPress, Laravel, Symfony y otras aplicaciones PHP.
🎯 Objetivos#
- ✅ Instalar Nginx y PHP-FPM en Ubuntu/Debian
- ⚡ Optimizar la configuración para el rendimiento
- 🔧 Configurar virtual hosts para múltiples sitios
- 🛠️ Probar y validar la instalación
- 🔒 Aplicar mejores prácticas de seguridad
🧰 Prerequisitos#
- VPS con Ubuntu 20.04+ o Debian 11+
- Acceso root o sudo
- Conexión SSH activa
- Nombre de dominio apuntando a tu VPS (opcional para pruebas)
1️⃣ Preparación del sistema#
📦 Actualización del sistema#
# Actualización de paquetes sudo apt update && sudo apt upgrade -y # Instalación de herramientas esenciales sudo apt install -y curl wget gnupg2 software-properties-common
🔧 Agregar repositorio PHP (para tener la última versión)#
# Agregar repositorio Ondrej para PHP sudo add-apt-repository ppa:ondrej/php -y sudo apt update
2️⃣ Instalación de Nginx#
📥 Instalación del servidor web#
# Instalación de Nginx sudo apt install nginx -y # Inicio y activación automática sudo systemctl start nginx sudo systemctl enable nginx # Verificación del estado sudo systemctl status nginx
🌐 Prueba básica#
Abre tu navegador y accede a http://tu-ip-servidor
. Deberías ver la página de bienvenida de Nginx.
# Verificar que Nginx esté escuchando en el puerto 80 sudo netstat -tlnp | grep :80
3️⃣ Instalación de PHP-FPM#
📥 Instalación de PHP y extensiones esenciales#
# Instalación de PHP 8.2 con FPM y extensiones comunes sudo apt install -y php8.2-fpm php8.2-cli php8.2-common php8.2-mysql \ php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml \ php8.2-bcmath php8.2-intl php8.2-opcache php8.2-readline # Inicio y activación de PHP-FPM sudo systemctl start php8.2-fpm sudo systemctl enable php8.2-fpm # Verificación del estado sudo systemctl status php8.2-fpm # Verificación de que el socket funcione sudo ls -la /run/php/
4️⃣ Configuración de Nginx para PHP#
🗂️ Estructura de directorios#
# Creación de la estructura para tus sitios sudo mkdir -p /var/www/html/misitio sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/
📝 Configuración de un sitio (virtual host)#
# Creación del archivo de configuración sudo nano /etc/nginx/sites-available/misitio
Configuración completa:
server { listen 80; listen [::]:80; # Reemplaza con tu nombre de dominio server_name misitio.com www.misitio.com; # Directorio raíz del sitio root /var/www/html/misitio; index index.php index.html index.htm; # Logs específicos del sitio access_log /var/log/nginx/misitio_access.log; error_log /var/log/nginx/misitio_error.log; # Configuración PHP location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Seguridad - bloquear acceso a archivos sensibles location ~ /\.ht { deny all; } location ~ /\.git { deny all; } # Optimización - cache de archivos estáticos location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|zip)$ { expires 1y; add_header Cache-Control "public, immutable"; } # Gestión de URLs (para WordPress, Laravel, etc.) location / { try_files $uri $uri/ /index.php?$query_string; } }
✅ Activación del sitio#
# Activación del sitio (crear enlace simbólico) sudo ln -s /etc/nginx/sites-available/misitio /etc/nginx/sites-enabled/ # Eliminar sitio por defecto (opcional) sudo rm /etc/nginx/sites-enabled/default # Prueba de la configuración sudo nginx -t # Recarga de Nginx sudo systemctl reload nginx
5️⃣ Prueba completa de la instalación#
📄 Creación de un archivo de prueba PHP#
# Crear un archivo PHP de prueba sudo nano /var/www/html/misitio/info.php
<?php phpinfo(); ?>
🌐 Pruebas en el navegador#
- Prueba PHP:
http://tu-dominio/info.php
⚠️ Seguridad: ¡Elimina el archivo
info.php
después de las pruebas!
sudo rm /var/www/html/misitio/info.php
6️⃣ Aplicación de cambios en servicios#
🔄 Aplicar cambios#
# Reiniciar servicios sudo systemctl restart php8.2-fpm sudo systemctl restart nginx # Verificar el buen funcionamiento sudo systemctl status nginx php8.2-fpm
7️⃣ Mantenimiento y monitoreo#
📊 Comandos de monitoreo#
# Estado de los servicios sudo systemctl status nginx php8.2-fpm # Logs en tiempo real sudo tail -f /var/log/nginx/error.log sudo journalctl -fu php8.2-fpm # Procesos PHP-FPM activos sudo ps aux | grep php-fpm # Conexiones activas sudo netstat -an | grep :80
🔧 Comandos de gestión#
# Reinicio sin interrupción sudo systemctl reload nginx sudo systemctl reload php8.2-fpm # Prueba de configuración antes de aplicar sudo nginx -t sudo php-fpm8.2 -t
✅ Resumen de la instalación#
Tu servidor Nginx + PHP-FPM ahora está operativo con:
- ✅ Nginx optimizado y seguro
- ✅ PHP 8.2 con extensiones esenciales
- ✅ PHP-FPM operativo
- ✅ Virtual hosts configurados
- ✅ Seguridad básica aplicada