¿Cómo configurar Nginx para HTTP y HTTPS?

Publicado 13 de octubre de 2024

Problema: Configuración de Nginx para HTTP y HTTPS

Configurar Nginx para manejar tráfico HTTP y HTTPS puede ser desafiante. Es necesario configurar el servidor para escuchar en diferentes puertos y gestionar certificados SSL/TLS, además de establecer la redirección correcta entre protocolos.

Solución: Modificar el Bloque de Servidor de Nginx para Soportar Ambos Protocolos

Ajustando el Archivo de Configuración de Nginx

Para permitir que Nginx maneje tráfico HTTP y HTTPS, necesitas cambiar la configuración del bloque de servidor. Los cambios principales implican:

  • Eliminar la directiva 'ssl on': Esta directiva fuerza SSL para todas las conexiones, lo que puede causar problemas con las peticiones HTTP.
  • Configurar directivas listen separadas para HTTP y HTTPS: Esto permite que el servidor acepte conexiones en los puertos 80 (HTTP) y 443 (HTTPS).

Ejemplo de un Bloque de Servidor Corregido

Aquí tienes un ejemplo de un bloque de servidor que soporta HTTP y HTTPS:

server {
    listen 80;
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /ruta/a/tu/certificado_ssl.crt;
    ssl_certificate_key /ruta/a/tu/clave_certificado_ssl.key;

    # Otras configuraciones SSL...

    root /var/www/tu_sitio_web;
    index index.html;

    # Otras configuraciones del servidor...
}

En esta configuración:

  • Se elimina la directiva 'ssl on'.
  • Se utilizan dos directivas 'listen': una para el puerto 80 (HTTP) y otra para el puerto 443 (HTTPS).
  • Se añade el parámetro 'ssl' a la directiva listen 443, habilitando SSL solo para conexiones HTTPS.
  • Se especifican las rutas de los certificados SSL usando las directivas ssl_certificate y ssl_certificate_key.

Estos cambios permiten que el servidor maneje correctamente las peticiones HTTP y HTTPS, solucionando el error 400 para las peticiones HTTP.

Consejo: Prueba Tu Configuración

Después de hacer cambios en tu configuración de Nginx, siempre pruébala antes de reiniciar el servidor. Usa el comando nginx -t para verificar errores de sintaxis y posibles problemas. Esto ayuda a prevenir errores de configuración que podrían llevar a tiempo de inactividad del servidor.