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
У меня была такая же проблема, и я решил ее следующими шагами:
- Я использую .env файлы с моим проектом (для управления им я использую пакет
python-decouple
); - Я разделяю все мои настройки на dev и prod py файлы с базовым общим python файлом.
- Далее, я импортирую все настройки из .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.