DisallowedHost at / Неверный заголовок HTTP_HOST: [IP] ; Вам может понадобиться добавить [IP] в ALLOWED_HOSTS

Я хочу развернуть свое приложение Django, и я уже использовал gunicorn, nginx и supervisor и хранил на AWS EC2

Вот фрагмент моего файла settings.py

DEBUG = False

ALLOWED_HOSTS = ['<my_ip>', '<my_ip>.ap-southeast-1.compute.amazonaws.com']

У меня есть settings_prod.py и settings_dev.py

settings_prod.py

DEBUG = False

ALLOWED_HOSTS = [
    '<my_ip>', '<my_ip>.ap-southeast-1.compute.amazonaws.com']

Из моего wsgi.py

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'votingapp.settings_prod')

Я ввел правильный адрес хоста и все равно получил ту же ошибку:

Exception Type: DisallowedHost
Exception Value:    
Invalid HTTP_HOST header: '<ip>'. You may need to add '<ip>' to ALLOWED_HOSTS.

Проблема в том, что он использует настройки из settings_dev.py, что не является моей идеальной последовательностью. Я хочу, чтобы супервизор или settings_dev.py разрешил моему IP размещать сайт.

Любая помощь будет принята с благодарностью.

Добавьте свой IP в ALLOWED HOSTS

DEBUG = False

ALLOWED_HOSTS = [
    'your IP',
]

Тогда вы можете запустить свой сервер как python manage.py runserver yourIP:port

У меня была такая же проблема, и я решил ее следующими шагами:

  1. Я использую .env файлы с моим проектом (для управления им я использую пакет python-decouple);
  2. Я разделяю все мои настройки на dev и prod py файлы с базовым общим python файлом.
  3. Далее, я импортирую все настройки из .base, .dev и .prod и управляю ими с помощью PROJECT env var (если env var установлен на dev, используются настройки dev).

__init__.py файл:

from .base import *

if config("PROJECT") == "prod":
    from .prod import *
else:
    from .dev import *

config установлен в base.py:

from decouple import AutoConfig

PROJECT_ROOT = Path(__file__).resolve().parent.parent
BASE_DIR = PROJECT_ROOT.parent

ENV_FILE_PATH = BASE_DIR.parent / '.env'
config = AutoConfig(ENV_FILE_PATH)

структура подпакета settings в моем проекте django:

...
settings
  ├── __init__.py
  ├── base.py
  ├── dev.py
  └── prod.py

Если вы используете AWS ES2, то у вас, вероятно, уже есть env var в вашем проекте, поэтому вы можете просто заменить python-decouple на ваше решение (например, os.environ по умолчанию) и затем управлять настройками с помощью ваших пользовательских env var.

Вернуться на верх