¿Cómo corregir el error "Duplicate Default Server" de Nginx?

Publicado 13 de octubre de 2024

Problema: Servidor predeterminado duplicado en Nginx

El error "Duplicate Default Server" en Nginx ocurre cuando varios bloques de servidor están configurados como servidor predeterminado para la misma combinación de dirección IP y puerto. Este problema de configuración puede hacer que Nginx responda de manera inconsistente a las solicitudes entrantes.

Solución: Eliminar configuraciones de servidor predeterminado duplicadas

Revisión del directorio /etc/nginx/sites-enabled

Para solucionar el problema del servidor predeterminado duplicado, revise el directorio /etc/nginx/sites-enabled. Este directorio contiene enlaces simbólicos a las configuraciones de bloques de servidor activos. Busque archivos con directivas default_server en conflicto.

Para encontrar archivos de configuración conflictivos, use este comando:

grep -R "default_server" /etc/nginx/sites-enabled

Este comando muestra todas las ocurrencias de "default_server" en los archivos de configuración. Revise la salida para encontrar directivas default_server duplicadas.

Después de encontrar los archivos en conflicto, elimine o cambie las directivas de servidor predeterminado innecesarias. Si tiene un archivo de configuración predeterminado que no necesita, elimínelo con:

sudo rm /etc/nginx/sites-enabled/default

Consejo: Hacer copia de seguridad antes de eliminar

Antes de eliminar cualquier archivo de configuración, cree una copia de seguridad para evitar perder configuraciones importantes. Use este comando para crear una copia de seguridad:

sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.bak

Modificación de la configuración de Nginx

Si necesita mantener varios bloques de servidor, modifique la directiva listen en sus archivos de configuración. Asegúrese de que solo un bloque de servidor tenga el parámetro default_server para cada combinación de dirección IP y puerto.

Para modificar un archivo de configuración, use un editor de texto como nano:

sudo nano /etc/nginx/sites-enabled/su_archivo_de_configuracion

Cambie la directiva listen para eliminar o agregar el parámetro default_server según sea necesario. Por ejemplo:

listen 80;  # Elimine default_server si no es necesario

O, si desea que este bloque de servidor sea el predeterminado:

listen 80 default_server;

Recuerde, use el parámetro default_server solo una vez por combinación IP:puerto en todos sus archivos de configuración.

Después de hacer estos cambios, guarde el archivo y salga del editor de texto. Repita este proceso para otros archivos de configuración que necesiten cambios.

Verificación de la solución

Reinicio de Nginx

Después de cambiar su configuración de Nginx, pruebe y reinicie el servicio para aplicar los cambios. Use este comando para verificar si su configuración es válida:

sudo nginx -t

Este comando prueba los archivos de configuración de Nginx en busca de errores de sintaxis. Si la prueba tiene éxito, verá un mensaje confirmando que la prueba de configuración fue exitosa.

Si la prueba pasa, reinicie el servicio Nginx para aplicar los cambios:

sudo systemctl restart nginx

Para sistemas que no usan systemd, use:

sudo service nginx restart

Consejo: Reinicio sin interrupciones

Para reiniciar Nginx sin interrumpir las conexiones activas, use el siguiente comando:

sudo systemctl reload nginx

Este método recarga la configuración sin cerrar conexiones.

Monitoreo de los registros de errores

Después de reiniciar Nginx, revise los registros de errores para confirmar que el error de servidor predeterminado duplicado ha desaparecido. Acceda al registro de errores de Nginx con este comando:

sudo tail -f /var/log/nginx/error.log

Este comando muestra las últimas entradas en el registro de errores en tiempo real. Busque nuevas apariciones del error de servidor predeterminado duplicado.

Para comprobar si su servidor funciona correctamente, intente acceder a su sitio web a través de un navegador web. Si el sitio se carga sin problemas, es una buena señal de que la configuración funciona correctamente.

También puede usar este comando para verificar si Nginx se está ejecutando sin errores:

sudo systemctl status nginx

Este comando muestra el estado actual del servicio Nginx, incluyendo mensajes de error o advertencias recientes.

Si no ve ningún error relacionado con servidores predeterminados duplicados y su sitio web es accesible, ha solucionado el problema.