Nginx, gunicorn & django на amazon lightsail, что такое имя хоста ip-адреса?
Я развернул Django-приложение на Amazon Lightsail VPS, и оно работает как ожидалось, когда я обращаюсь к нему по доменному имени xxxxx.com
, однако, если я пытаюсь обратиться к нему по IP-адресу, оно выдает ошибку:
Invalid HTTP_HOST header: 'ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com'.
You may need to add 'ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com' to ALLOWED_HOSTS.
DisallowedHost at /
Invalid HTTP_HOST header: 'ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com'.
You may need to add 'ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com' to ALLOWED_HOSTS.
Request Method: GET
Request URL: https://ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com/`
Конечно, MY-IP-ADDR-Here
- это номер моего реального IP-адреса.
Я странствую:
- Почему lightsail изменил url с 'MY.IP.Addr.Here' на
ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com/
? - Почему nginx проксировал этот запрос на Django? Я ожидал, что он отбросит запрос.
- Безопасно ли добавить
ec2-MY-IP-ADDR-Here.compute-1.amazonaws.com
к моим разрешенным хостам? - Стоит ли удалить
MY-IP-ADDR-Here
из файла settings.py?
Ниже перечислены соответствующие параметры конфигурации:
/etc/nginx/sites-enabled/mysite
server {
listen 80;
server_name xxxxx.com MY.IP.ADDr.Here;
location / {
include proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
# many lines created hy certbot
#
`# I added the following block to tell nginx to discard any request that doesn't match the xxxxx.com MY.IP.ADDr.Here;
# https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/#allowed-hosts`
server {
listen 80 default_server;
listen [::]:80 default_server;
return 444;
}
myproject/settings.py
ALLOWED_HOSTS = ["xxxxx.com", "MY-IP-ADDR-Here"]
Не рекомендуется добавлять его в ALLOWED_HOST таким образом, так как это небезопасно.
Добавьте его в переменные env, если вам необходимо получить доступ к странице по ip-адресу, в противном случае не делайте этого.