Django ALLOWED_HOSTS

Salman Mehmood 10 octubre 2023
Django ALLOWED_HOSTS

Este artículo muestra cómo tomar su sitio web de Django, prepararlo para su lanzamiento público, configurar ALLOWED_HOSTS y solucionar los principales problemas esperados durante la implementación web con Django.

Solucione los principales problemas de implementación y establezca ALLOWED_HOSTS en Django

Debe configurar algunas configuraciones clave para tener un sitio web seguro, un sitio web estable en un sitio web fácil de usar. Veamos cómo hacerlo sin obtener un error.

Supongamos que tenemos un sitio web llamado ejemplo en esta URL ejemplo.dominios, y hacemos ssh en ese servidor. Tenemos nuestra infraestructura básica del proyecto Django en el directorio de inicio de este usuario.

/home/example/exampledomains

Así que ahora haremos muchos de nuestros cambios dentro del directorio del proyecto, y luego allí, tenemos el archivo settings.py. Eso nos lleva al primer ajuste de configuración que queremos establecer, ocultando la SECRET_KEY.

Siga dentro de su settings.py SECRET_KEY es igual a una larga cadena de caracteres, números y símbolos, entonces, ¿qué haremos con este archivo? Como puede ver en el comentario (no es seguro para la producción).

Ahora queremos hacer algo diferente, queremos leer la SECRET_KEY de un archivo, y podemos hacerlo con las dos líneas de código a continuación. Copiaremos nuestra SECRET_KEY en el archivo secret_key.txt y luego crearemos un archivo llamado secret_key.txt en la raíz del directorio de nuestro proyecto que contiene la clave secreta.

Entonces, es navegar a esa ruta en nuestro sistema, abrir el archivo, leer la clave secreta y asignarla a la variable SECRET_KEY.

Avancemos y guardemos ese archivo en la raíz de nuestro directorio de proyectos.

with open(os.path.join(BASE_DIR, "secret_key.txt")) as f:
    SECRET_KEY = f.read().strip()

Necesitamos agregar algunas configuraciones HTTPS adicionales a nuestro archivo settings.py, así que abra su archivo settings.py y desplácese hacia abajo hasta la parte inferior. Necesitamos sumar estas tres variables y establecerlas como True.

El SESSION_COOKIES_SECURE se asegura de que sus cookies se sirvan a través de HTTP, similar a CSRF_COOKIES_SECURE de que sus cookies CSRF se protegen y se sirven a través de HTTPS. La tercera variable, llamada SECURE_SSL_REDIRECT, asegura que todo su tráfico sea redirigido de HTTP a HTTPS.

SESSION_COOKIES_SECURE = True
CSRF_COOKIES_SECURE = True
SECURE_SSL_REDIRECT = True

A continuación, debemos agregar de manera similar algunas configuraciones de HSTS a nuestro archivo settings.py. Si no está familiarizado con HSTS, significa seguridad de transporte estricta de HTTP.

HSTS esencialmente está agregando información al encabezado de su solicitud, que dice que los navegadores no deben y no pueden conectarse a su sitio web a través de una conexión no segura, es decir, HTTP.

Miremos esas configuraciones en la parte inferior de nuestro archivo settings.py y creemos algunas variables.

El SECURE_HSTS_SECONDS almacena un número realmente grande (el de abajo es por un año). Necesitamos poner esa información en la solicitud inicial y en las solicitudes posteriores al cliente, y el navegador la respetará.

Durante el próximo año, no podremos conectarnos a su sitio web a través de una conexión insegura, por lo que es bueno.

Queremos establecer SECURE_HSTS_PRELOAD y SECURE_HSTS_INCLUDE_SUBDOMAINS en True porque incluso si no tiene subdominios, es bueno incluirlos en el encabezado de la solicitud.

SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True

Avanzando, queremos asegurarnos de que nuestro nombre de dominio esté especificado en la configuración de host permitida. Nuevamente, trabajaremos en el archivo settings.py y encontraremos la variable ALLOWED_HOSTS (es posible que ya lo haya especificado aquí, esta es solo una lista de nombres de dominio).

Los nombres de host permitidos para servir o conectarse a este servidor son su servidor Django; como estamos trabajando con example.domains, especificamos el nombre de dominio y la versión www.example.domains de eso.

ALLOWED_HOSTS = ["example.domains", "www.example.domains"]

A continuación, debemos asegurarnos de desactivar la depuración en producción. Le mostraremos las diferencias entre la depuración igual a True y False.

Establezca primero el archivo settings.py para asegurarse de que DEBUG esté configurado en False. Es True cuando inicia su proyecto Django de forma predeterminada.

En nuestro navegador web, si vamos a una página y depuramos a False, si esa página no existe, veremos un error fácil de usar. Sabes que es mejor de lo que parece cuando DEBUG es igual a True.

DEBUG = False

Avanzando, debemos asegurarnos de copiar nuestros archivos estáticos en nuestro directorio raíz estático. Nos referimos a imágenes, CSS, JavaScript y cualquier archivo PHP que no sea HTML en nuestro servidor Django cuando decimos archivos estáticos.

Por defecto, nuestro archivo settings.py tiene una URL estática en esa dirección; queremos agregar una raíz estática. Nuestro caso está justo en el directorio base de nuestro proyecto '/static/'.

Django tiene una función muy conveniente que podemos ejecutar para copiar esos archivos en ese directorio estático usando el siguiente comando.

python manage.py collectstatic

Por último, necesitamos ejecutar la lista de verificación de implementación automatizada de Django. Esta es una función conveniente que nos proporciona Django.

Dentro de la raíz de nuestro directorio de proyectos, debemos escribir el código a continuación.

python manage.py check --deploy

Entonces, si ha estado siguiendo, no debería ver problemas en este momento. Antes de ejecutar esto, es posible que vea algo que le muestre los problemas individuales que debe solucionar antes de la implementación.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn