Genera bloques server{} de Nginx para sitios estáticos, proxies y PHP
server {
listen 80;
listen [::]:80;
server_name tudominio.com www.tudominio.com;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_min_length 256;
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header X-XSS-Protection "1; mode=block";
root /var/www/html;
index index.html index.php;
charset utf-8;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.html;
}
}También podrías necesitar
Nginx es el servidor web más usado en producción: sirve el 34% de los sitios web del mundo gracias a su arquitectura asíncrona de alto rendimiento. Su configuración puede ser intimidante — la sintaxis de directivas, contextos anidados (http, server, location) y la diferencia entre listen 80 y listen 443 ssl confunden a quienes configuran su primer servidor. Esta herramienta genera bloques server{} válidos para los tres casos de uso más comunes. El modo 'Sitio estático' genera la configuración para servir archivos desde un directorio (root), con try_files para aplicaciones SPA que manejan routing en cliente. El modo 'Reverse Proxy' genera proxy_pass hacia tu aplicación backend (Node.js, Python, Ruby) incluyendo headers fundamentales: proxy_set_header Host, X-Real-IP y X-Forwarded-For para que tu app vea la IP real del cliente. El modo 'PHP/Laravel' configura FastCGI con php-fpm, incluyendo SCRIPT_FILENAME para el routing correcto de frameworks PHP. En todos los modos, si activás SSL se genera el bloque listen 443 ssl con ssl_certificate y ssl_key para Let's Encrypt, más un server block de redirección de HTTP a HTTPS. El bloque de headers de seguridad incluye los headers OWASP recomendados: X-Frame-Options, X-Content-Type-Options, Referrer-Policy y X-XSS-Protection. El output descargable es un archivo .conf listo para colocar en /etc/nginx/sites-available/.
¿Qué es un 'server block' en Nginx y para qué sirve?
Un server block es el equivalente Nginx a un VirtualHost de Apache. Define cómo Nginx responde a requests de un dominio o IP específico. Múltiples server blocks permiten alojar varios sitios en el mismo servidor: Nginx lee el header Host del request para determinar qué server block usar. Cada server block puede tener su propio root, SSL, headers y reglas de proxy. Esta herramienta genera un server block completo listo para /etc/nginx/sites-available/.
¿Qué headers de seguridad incluye la configuración y por qué?
Con la opción de headers de seguridad activada se añaden: X-Frame-Options DENY (previene clickjacking en iframes), X-Content-Type-Options nosniff (previene MIME-sniffing), Referrer-Policy strict-origin-when-cross-origin (controla qué URL se envía como Referrer), y X-XSS-Protection '1; mode=block' (activa el filtro XSS en navegadores legacy). Estos son los headers mínimos recomendados por OWASP para cualquier aplicación web. Para una configuración más completa, agrega Content-Security-Policy y Permissions-Policy manualmente según las necesidades de tu app.
¿Cómo funciona la configuración para SSL con Let's Encrypt?
La configuración generada asume que ya obtuviste el certificado con Certbot: ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem y ssl_certificate_key .../privkey.pem. Incluye ssl_protocols TLSv1.2 TLSv1.3 (desactiva versiones inseguras TLS 1.0/1.1), ssl_prefer_server_ciphers on, y ssl_session_cache shared:SSL:10m para mejorar el rendimiento reutilizando sesiones SSL. El segundo server block escucha en puerto 80 y redirige todo a HTTPS con un 301 permanente.
¿Qué es proxy_pass y cuándo usarlo?
proxy_pass transfiere el request al servidor backend especificado. Se usa cuando Nginx actúa como reverse proxy frente a una aplicación Node.js (Express, NestJS), Python (FastAPI, Django), o cualquier servicio que escucha en un puerto local. Nginx recibe la request del cliente, la reenvía al backend, recibe la respuesta, y la devuelve al cliente. Esto permite tener múltiples aplicaciones en el mismo servidor (cada una en un puerto diferente), con Nginx manejando SSL, compresión, rate limiting y balanceo de carga.
¿La configuración generada funciona sin modificaciones?
La configuración es un punto de partida funcional y válido para los casos de uso más comunes. Puede necesitar ajustes según tu entorno: las rutas de los certificados SSL deben coincidir con donde Certbot los almacenó, el usuario de php-fpm puede ser www-data, php8.x-fpm, u otro según tu instalación, y el puerto del backend en reverse proxy debe coincidir con el que usa tu aplicación. Siempre testea con 'sudo nginx -t' antes de recargar con 'sudo systemctl reload nginx'.