장고 ALLOWED_HOSTS

Salman Mehmood 2023년10월10일
장고 ALLOWED_HOSTS

이 문서에서는 Django 웹 사이트를 가져오고 공개 릴리스를 준비하고 ALLOWED_HOSTS를 설정하고 Django를 사용하여 웹 배포 중에 예상되는 주요 문제를 수정하는 방법을 보여줍니다.

주요 배포 문제 수정 및 Django에서 ALLOWED_HOSTS 설정

안전한 웹사이트, 사용자 친화적인 웹사이트에서 안정적인 웹사이트를 가지려면 몇 가지 주요 설정을 구성해야 합니다. 오류 없이 수행하는 방법을 살펴보겠습니다.

이 URL example.domainsexample이라는 웹 사이트가 있고 해당 서버에 ssh라고 가정합니다. 이 사용자의 홈 디렉토리에 기본 Django 프로젝트 인프라가 있습니다.

/home/example/exampledomains

이제 우리는 프로젝트 디렉토리 내에서 많은 변경 작업을 수행할 것이며 거기에 settings.py 파일이 있습니다. 그러면 SECRET_KEY를 숨기고 설정하려는 첫 번째 구성 설정이 나타납니다.

settings.py SECRET_KEY 내부를 따라가면 긴 문자, 숫자 및 기호 문자열과 같으므로 이 파일로 무엇을 할까요? 댓글에서 볼 수 있듯이(프로덕션용으로 안전하지 않음).

이제 우리는 뭔가 다른 것을 하고 싶고, 파일에서 SECRET_KEY를 읽고 싶고, 아래 두 줄의 코드로 그렇게 할 수 있습니다. secret_key.txt 파일에 SECRET_KEY를 복사한 다음 비밀 키가 포함된 프로젝트 디렉토리의 루트에 secret_key.txt라는 파일을 생성합니다.

따라서 우리 시스템의 해당 경로로 이동하여 파일을 열고 비밀 키를 읽고 SECRET_KEY 변수에 할당합니다.

계속해서 해당 파일을 프로젝트 디렉터리의 루트에 저장하겠습니다.

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

settings.py 파일에 추가 HTTPS 설정을 추가해야 하므로 settings.py 파일을 열고 맨 아래로 스크롤합니다. 이 세 가지 변수를 추가하고 True와 동일하게 설정해야 합니다.

SESSION_COOKIES_SECURE는 CSRF 쿠키가 HTTPS를 통해 보호되고 제공되는 CSRF_COOKIES_SECURE와 유사하게 쿠키가 HTTP를 통해 제공되는지 확인합니다. SECURE_SSL_REDIRECT라는 세 번째 변수는 모든 트래픽이 HTTP에서 HTTPS로 리디렉션되도록 합니다.

SESSION_COOKIES_SECURE = True
CSRF_COOKIES_SECURE = True
SECURE_SSL_REDIRECT = True

다음으로 유사하게 일부 HSTS 설정을 settings.py 파일에 추가해야 합니다. HSTS에 익숙하지 않은 경우 HTTP 엄격한 전송 보안을 나타냅니다.

HSTS는 기본적으로 브라우저가 안전하지 않은 연결(예: HTTP)을 통해 웹 사이트에 연결해서는 안 되며 연결할 수 없다는 요청 헤더에 몇 가지 정보를 추가합니다.

settings.py 파일 하단에 있는 설정을 살펴보고 몇 가지 변수를 생성해 보겠습니다.

SECURE_HSTS_SECONDS는 매우 큰 숫자를 저장합니다(아래는 1년). 우리는 해당 정보를 클라이언트에 대한 초기 요청 및 후속 요청에 입력해야 하며 브라우저는 이를 존중합니다.

내년에는 안전하지 않은 연결을 통해 귀하의 웹사이트에 연결할 수 없으므로 다행입니다.

하위 도메인이 없더라도 해당 요청 헤더에 포함하는 것이 좋기 때문에 SECURE_HSTS_PRELOADSECURE_HSTS_INCLUDE_SUBDOMAINSTrue로 설정하려고 합니다.

SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True

계속 진행하면서 허용된 호스트 설정에 도메인 이름이 지정되었는지 확인하려고 합니다. 다시, 우리는 settings.py 파일에서 작업하고 ALLOWED_HOSTS 변수를 찾을 것입니다(이것은 여기에 이미 지정되어 있을 수 있으며 이것은 단지 도메인 이름 목록일 뿐입니다).

이 서버에 제공하거나 연결할 수 있는 호스트 이름은 Django 서버입니다. example.domains로 작업할 때 도메인 이름과 www.example.domains 버전을 지정합니다.

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

다음으로 프로덕션 환경에서 디버깅을 해제해야 합니다. 동일한 TrueFalse 디버깅의 차이점을 보여드리겠습니다.

settings.py 파일을 먼저 설정하여 DEBUGFalse로 설정되도록 합니다. 기본적으로 Django 프로젝트를 시작하면 True입니다.

웹 브라우저에서 페이지로 이동하여 False로 디버그하면 해당 페이지가 존재하지 않으면 사용자에게 친숙한 오류가 표시됩니다. DEBUGTrue와 같을 때 보이는 것보다 낫다는 것을 알고 있습니다.

DEBUG = False

계속해서 정적 파일을 정적 루트 디렉터리에 복사해야 합니다. 정적 파일은 Django 서버에 있는 이미지, CSS, JavaScript 및 HTML이 아닌 모든 PHP 파일을 의미합니다.

기본적으로 settings.py 파일에는 해당 주소에 정적 URL이 있습니다. 정적 루트를 추가하려고 합니다. 우리의 경우는 '/static/' 프로젝트의 기본 디렉토리에 있습니다.

Django에는 다음 명령을 사용하여 해당 파일을 정적 디렉토리에 복사하기 위해 실행할 수 있는 매우 편리한 기능이 있습니다.

python manage.py collectstatic

마지막으로 Django 자동 배포 체크리스트를 실행해야 합니다. 이것은 Django가 우리에게 제공하는 편리한 기능입니다.

프로젝트 디렉토리의 루트 안에 아래 코드를 입력해야 합니다.

python manage.py check --deploy

따라서 따라해 왔다면 이 시점에서 아무런 문제가 없어야 합니다. 이를 실행하기 전에 배포 전에 수정해야 하는 개별 문제를 보여주는 항목이 표시될 수 있습니다.

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