¿Cómo solucionar el error '[emerg] server directive is not allowed here' en Nginx?

Publicado 8 de septiembre de 2024

Problema: Error de directiva del servidor Nginx

Al configurar Nginx, es posible que vea el mensaje de error '[emerg] "server" directive is not allowed here'. Este error ocurre cuando coloca la directiva del servidor en el lugar equivocado en el archivo de configuración de Nginx. Significa que Nginx no puede utilizar la configuración debido a este error, lo que puede impedir que el servidor web inicie o se recargue correctamente.

Soluciones para corregir el error '[emerg] "server" directive is not allowed here'

Estructura adecuada del archivo de configuración de Nginx

Para solucionar el error '[emerg] "server" directive is not allowed here', debe estructurar correctamente su archivo de configuración de Nginx. El bloque del servidor debe estar dentro de un bloque http. Así es como se hace:

  1. Abra su archivo de configuración principal de Nginx (/etc/nginx/nginx.conf).
  2. Busque el bloque http. Si falta, agréguelo:
http {
    # Sus bloques de servidor van aquí
}
  1. Coloque su bloque de servidor dentro del bloque http:
http {
    server {
        # Su configuración de servidor
    }
}
  1. Verifique la estructura de su archivo nginx.conf para asegurarse de que sigue este diseño:
events {
    # Configuración del contexto de eventos
}

http {
    # Configuración global de HTTP

    server {
        # Bloque de servidor 1
    }

    server {
        # Bloque de servidor 2
    }
}

Uso de directivas Include para una configuración modular

Puede utilizar directivas include para dividir su configuración en varios archivos:

  1. En su archivo principal nginx.conf, agregue una declaración include dentro del bloque http:
http {
    include /etc/nginx/sites-enabled/*;
}
  1. Cree archivos de configuración separados para cada bloque de servidor en el directorio /etc/nginx/sites-available/.

  2. Para activar una configuración, cree un enlace simbólico de sites-available a sites-enabled:

sudo ln -s /etc/nginx/sites-available/su-configuracion /etc/nginx/sites-enabled/

Este método mantiene limpio su archivo de configuración principal y facilita la gestión de múltiples bloques de servidor.

Verificación de sintaxis y prueba de configuración

Antes de aplicar cambios a su configuración de Nginx, siempre pruébela:

  1. Use el comando nginx -t para verificar errores de sintaxis:
sudo nginx -t
  1. Si hay errores, el comando le mostrará el número de línea y el archivo donde está el problema.

  2. Corrija cualquier problema y ejecute la prueba nuevamente hasta que obtenga un mensaje de éxito.

  3. Una vez que la prueba pase, recargue Nginx para aplicar los cambios:

sudo systemctl reload nginx