Hostwinds Tutoriales
Resultados de búsqueda para:
Tabla de contenido
Etiquetas: Cloud Servers, SSL, VPS
Si está ejecutando una aplicación web en un puerto privado (como Localhost: 3000), no es directamente accesible a través de Internet.Una de las formas más efectivas de exponer esa aplicación de forma segura es poner un proxy inverso frente a él.
Nginx es una herramienta liviana conocida que puede hacer exactamente eso, recibir tráfico entrante y reenviarlo a su aplicación, al tiempo que maneja HTTPS con un certificado SSL gratuito de Let's Cifrypt.
En esta guía, aprenderás a:
¿Nuevo en los servidores web?Mira nuestra explicación en Cómo funcionan los servidores web.
UN proxy inverso es un servidor que se encuentra entre sus usuarios y sus servicios de backend.En lugar de que su aplicación escuche públicamente en un puerto (como 3000), Nginx recibe el tráfico primero y luego lo pasa a la aplicación que se ejecuta en segundo plano.
He aquí por qué este enfoque es tan útil:
Incluso si su aplicación ya puede manejar el tráfico web, el uso de NGINX como proxy inverso a menudo simplifica la configuración, mejora la flexibilidad y aumenta el control.
Antes de comenzar, asegurémonos de tener todo lo que necesita:
A yourdomain.com → 123.123.123.123
A www.yourdomain.com → 123.123.123.123
La propagación puede llevar unos minutos a unas pocas horas.
¿No sabes cómo configurar tu DNS?Aquí está Cómo agregar un registro A con la mayoría de los anfitriones de dominio.
Nota: Si su aplicación aún no se está ejecutando, está bien, aún puede pasar por la configuración y probar más tarde.
sudo apt update
sudo apt install nginx
Luego verifique que se esté ejecutando:
sudo systemctl status nginx
Deberías ver "activo (en ejecución)".
sudo apt install certbot python3-certbot-nginx
Este complemento permite a CERTBOT modificar su configuración NGINX automáticamente cuando solicita un certificado, no se requiere edición manual para configuraciones básicas.
¿Tiene otro sistema operativo?Sigue esta guía en Cómo instalar Vamos en cifrado en Fedora y Debian
Ahora que su sistema está listo, el primer paso real es configurar NGINX para escuchar el tráfico en su dominio y reenviarlo a su aplicación interna; esto es lo que hace que NGINX actúe como un proxy inverso.
Sin esta configuración, los usuarios que intentan visitar su sitio web presionarían una página vacía o la pantalla de bienvenida predeterminada de NGINX.Necesita decir explícitamente nginx:
Creará un archivo de configuración para su dominio en el directorio disponible de los sitios de Nginx.Esto mantiene las configuraciones organizadas y facilita la habilitación o deshabilitación de sitios individuales.
sudo nano /etc/nginx/sites-available/yourdomain.com
Pegue en el siguiente bloque, ajustando el dominio y el puerto de la aplicación según sea necesario:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
# Pass important headers to the backend
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nginx usa enlaces simbólicos en el sitios habilitados directorio para activar sitios.Así que ahora crearás un enlace y recargarás Nginx:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
Verifique los errores de sintaxis.Si todo se ve bien:
sudo systemctl reload nginx
Su proxy inverso ahora está en vivo, solicitudes para http://yourdomain.com se pasará a su aplicación en el puerto 3000.
Con el proxy inverso funcionando a través de HTTP, el siguiente paso es asegurarlo con HTTPS.Esto agrega cifrado a toda comunicación entre sus usuarios y su servidor: proteger las credenciales de inicio de sesión, las solicitudes de API, los datos personales y más.
Utilizará Let's Cintpt, una autoridad de certificado gratuita y CertBot, que automatiza el proceso.
Ejecute este comando, reemplazando los dominios con sus valores reales:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Lo que esto hace:
CertBot Will:
Consejo: Si su DNS no está completamente propagado o el puerto de bloqueos de firewall de su servidor, la validación fallará.Puedes probar esto con:
curl -I http://yourdomain.com
Para comprender mejor los puertos, consulte nuestra guía sobre Cómo funcionan los puertos del servidor web.
Después de completar CertBot, su configuración NGINX debe incluir algo como esto:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
Ahora debería poder visitar https://yourdomain.com y ver su sitio con un certificado SSL válido.
Si no eligió la opción de redirección durante la configuración de CertBot, puede agregar esto manualmente:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
Esto obliga a todo el tráfico HTTP a ser redirigido a HTTPS, lo que garantiza que los usuarios no usen accidentalmente la versión insegura de su sitio.
Una vez que su certificado SSL esté en su lugar, puede ajustar a Nginx para mejorar la seguridad y la compatibilidad.Estas configuraciones entran dentro del bloque HTTPS del servidor.
Aquí hay un ejemplo mejorado:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
Estos cambios mejoran su puntaje de seguridad SSL y protegen a los visitantes contra ataques de degradación o opciones de cifrado inseguras.
Opcional: Puede probar su sitio con SSL Labs para ver cómo funciona su configuración y obtener sugerencias de mejora específicas.
Para un cifrado aún más fuerte, puede generar una tecla Diffie-Hellman (DH) personalizada.Este paso es opcional, pero a menudo se recomienda para entornos de producción.
Ejecute este comando para generar un grupo DH de 2048 bits:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Luego agregue la siguiente línea a su bloque de servidor SSL:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Los parámetros de Diffie-Hellman se fortalecen Secreto de avance, lo que significa que incluso si su clave privada se ve comprometida de alguna manera en el futuro, las sesiones cifradas pasadas seguirán siendo seguras.
Se necesitan unos minutos para generar el grupo DH, pero es un paso único y vale la pena hacer para una mejor postura de seguridad.
Vamos a cifrar certificados cada 90 días.Afortunadamente, CERTBOT instala un temporizador del sistema que verifica dos veces al día los certificados debido a expirar y renovarlos automáticamente.
Puede confirmar que el temporizador está activo con:
sudo systemctl list-timers | grep certbot
Deberías ver algo como esto:
NEXT LEFT LAST PASSED UNIT ACTIVATES
2025-06-19 04:00:00 UTC 12h 2025-06-18 04:00:00 UTC 11h ago certbot.timer certbot.service
Para probar el proceso de renovación manualmente (sin hacer cambios), ejecute:
sudo certbot renew --dry-run
Esto simula el proceso de renovación completo y confirma que su sistema está listo para manejarlo automáticamente.
Si no hay errores, sus certificados se renunciarán en silencio en el fondo en el futuro.
Ahora que su proxy inverso está configurado y asegurado con SSL, es una buena idea concluir con algunas verificaciones prácticas y mejores prácticas.
Estos simples hábitos pueden ayudar a prevenir problemas en el futuro, facilitar su configuración y asegurarse de que todo siga funcionando como espere.
Incluso si todo parece estar funcionando, pasar unos minutos adicionales aquí puede ahorrarle tiempo y problemas más tarde.
Reinicie su aplicación si no detecta automáticamente los cambios
Algunas aplicaciones deben reiniciarse para trabajar correctamente detrás de un proxy.
Verificar registros
Puede monitorear los registros de Nginx para errores o tráfico inusual:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Mantenga a Nginx y CertBot actualizado
Use Sudo Apt Update && Sudo Apt Actualad regularmente.Los paquetes actualizados corrigen errores, mejoran la compatibilidad y los problemas de seguridad del parche.
Una vez que haya dominado los conceptos básicos de configurar un proxy inverso seguro, puede extender su configuración para admitir necesidades más complejas.Aquí hay algunos escenarios comunes que pueden ayudarlo a sacar más de su servidor.
Si ejecuta varias aplicaciones web en diferentes puertos, NGINX puede enrutar solicitud a cada aplicación en función de la ruta de dominio o URL.
Ejemplo: diferentes dominios
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://localhost:3001;
# proxy headers here
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://localhost:3002;
# proxy headers here
}
}
Esta configuración le permite servir múltiples aplicaciones utilizando subdominios separados, todos a través de Nginx en puertos estándar.
¿Usando Docker?Aprender Cómo proxy de múltiples aplicaciones Docker con Nginx.
Alternativamente, puede proxy en función de las rutas de URL, lo cual es útil si desea todas las aplicaciones en un solo dominio:
server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://localhost:3001/;
# proxy headers here
}
location /app2/ {
proxy_pass http://localhost:3002/;
# proxy headers here
}
}
Nota: Cuando se utiliza la proxy basado en la ruta, las bases finales y la reescritura de URL pueden ser complicadas, asegúrese de que su aplicación de backend pueda manejar ser atendida bajo un subvataje.
Puede limitar cuántas solicitudes puede hacer un cliente en un período de tiempo determinado para proteger su backend del abuso o la sobrecarga accidental.
Agregue esto en el bloque http en /etc/nginx/nginx.conf:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
Luego en su servidor o bloque de ubicación:
limit_req zone=mylimit burst=20 nodelay;
Esta configuración permite 10 solicitudes por segundo con ráfagas de hasta 20 solicitudes, eliminando las solicitudes de exceso para evitar abrumar su aplicación.
Si tiene varias instancias de su aplicación en ejecución (por ejemplo, múltiples contenedores o VPS), NGINX puede distribuir el tráfico entre ellos:
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
# proxy headers here
}
}
Nginx Balances solicita Round-Robin de forma predeterminada, pero puede configurarlo para otros métodos como Menod Connections o IP Hash.
Para obtener más información, consulte nuestra guía en Equilibrio de carga del DNS.
Puede personalizar el registro para incluir información importante para la resolución o análisis:
log_format proxy '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream_response_time $upstream_response_time '
'request_time $request_time';
access_log /var/log/nginx/proxy_access.log proxy;
Esto registra los tiempos de respuesta aguas arriba y los tiempos totales de solicitud, lo que ayuda a identificar respuestas de backend lenta.
Es posible que desee agregar o modificar los encabezados HTTP para la seguridad o la funcionalidad:
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy no-referrer-when-downgrade;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Estos encabezados protegen contra el clickjacking, el olfato mime y el uso de HTTPS.
Escrito por Hostwinds Team / junio 14, 2019