Preparación
- VPS con Ubuntu 20.04/22.04/24.04 o Debian 11/12.
- Usuario con sudo, acceso SSH.
- Dominio (para HTTPS) y puertos abiertos 80/443 en el panel del proveedor de acceso.
Instalación de Nginx y verificación rápida
sudo apt update && sudo apt -y upgrade
sudo apt -y install nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Esperamos 200 encabezados OK. La página de inicio de Nginx suele encontrarse en /var/www/html/.
Autorizamos HTTP/HTTPS en UFW y verificamos el servicio.
sudo systemctl status nginx --no-pager
sudo ufw allow 'Nginx Full' # Opens 80 and 443
sudo ufw enable
sudo ufw status
Si no utiliza UFW, asegúrese de que los puertos 80/443 estén abiertos en el firewall/panel del proveedor.
Cree un directorio de sitio web y una página de prueba.
sudo mkdir -p /var/www/example.com/html
echo 'Hello from Nginx!' | sudo tee /var/www/example.com/html/index.html
sudo chown -R $USER:$USER /var/www/example.com
Recomendamos un directorio independiente para cada dominio: /var/www/<dominio>/html.
Cree un bloque de servidor (configuración del sitio web)
Archivo /etc/nginx/sites-available/example.com:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
Activamos el sitio web, verificamos la sintaxis y lo volvemos a cargar.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # syntax is ok
sudo systemctl reload nginx
curl -I http://example.com
Si nginx -t muestra errores, corrija la configuración (directorio raíz, nombres de dominio, paréntesis de cierre, etc.).
Gzip y encabezados de seguridad básicos
Cree el archivo /etc/nginx/conf.d/optimizations.conf:
# Gzip (standard types)
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript application/xml text/xml application/rss+xml image/svg+xml;
# Security-headings (basic)
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
Reiniciar la configuración:
sudo nginx -t && sudo systemctl reload nginx
Para la producción, debería considerar CSP/Permissions-Policy, pero proceda por etapas para no «descuidar» el frontend.
HTTPS en 2 minutos (Let’s Encrypt)
sudo apt -y install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
# automatic renewal of certificates
systemctl status certbot.timer
Certbot escribe una redirección 301 a HTTPS y crea una tarea para la renovación automática. Compruebe https://example.com.
Compatibilidad con PHP-FPM (opcional)
Instale FPM y conéctelo a Nginx:
sudo apt -y install php-fpm
Añade el siguiente bloque en la configuración del sitio web (/etc/nginx/sites-available/example.com):
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # check the actual version
}
Verificamos y revisamos:
sudo nginx -t && sudo systemctl reload nginx
Para verificarlo, cree el archivo /var/www/example.com/html/info.php con <?php phpinfo(); ?>, ábralo en un navegador y, a continuación, elimine el archivo.
Registros y análisis rápido de problemas
- Errores: /var/log/nginx/error.log
- Acceso: /var/log/nginx/access.log
- Visualización rápida de las últimas líneas: sudo tail -n 200 /var/log/nginx/error.log
Compruebe las unidades y los puertos:
sudo systemctl status nginx
sudo ss -tulpn | grep -E ':80|:443'
Lista de comprobación antes del inicio
- Directorio del sitio creado, propietario/derechos correctos.
- Configuración del bloque servidor registrada, nginx -t — OK.
- HTTP/HTTPS abierto en UFW/cortafuegos.
- Gzip y encabezados de seguridad básicos activados.
- HTTPS emitido por Let’s Encrypt, actualización automática activada.
- (Si se necesita PHP) – PHP-FPM conectado, info.php eliminado.
En resumen para AlmaLinux/Rocky/CentOS (familia RHEL)
sudo dnf -y install nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload
# catalogs/configurations:
# root usually /usr/share/nginx/html або /var/www//html
# configs: /etc/nginx/nginx.conf and /etc/nginx/conf.d/*.conf
sudo dnf -y install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo dnf -y install php-fpm
# fastcgi_pass unix:/run/php-fpm/www.sock (or your own way)