У меня есть сайт, настроенный таким образом: nginx в качестве прокси-сервера, прокси-сервер запрашивает tu экземпляр gunicorn, обслуживающий сайт Django через сокет UNIX.Почему nginx принимает запросы с заголовком узла, который не совпадает с именем сервера?
Это моя конфигурация Nginx:
server {
listen 80;
server_name api.mysite.com;
location /static/ {
alias /webapps/mysite/static/;
autoindex off;
}
location/{
include proxy_params;
proxy_pass http://unix:/webapps/mysite/mysite.sock;
}
}
Это мое понимание того, что Nginx, при получении запроса, соответствует заголовку Host
против параметра server_name блока сервера и, если он соответствует , он служит ему. Однако nginx пытается подавать (передавая запрос на мой сервер Django) с заголовком Host
, отличным от api.mysite.com. Django имеет параметр с именем ALLOWED_HOSTS
(в моем случае установлен в ['api.mysite.com']
), который выполняет дополнительную проверку заголовка Host
и вызывает ошибку, если заголовок запроса Host
не соответствует, что не должно произойти, поскольку nginx предположительно уже фильтрует это. Дело в том, что я вижу ошибки, вызванные Джанго которые выглядят следующим образом:
- Неправильный заголовок HTTP_HOST: «/webapps/mysite/mysite.sock:». Предоставленное доменное имя недействительно согласно RFC 1034/1035.
- Недопустимый заголовок HTTP_HOST: 'testp1.piwo.pila.pl'. Вам может потребоваться добавить 'testp1.piwo.pila.pl' в ALLOWED_HOSTS.
- Недопустимый заголовок HTTP_HOST: 'xxx.xxx.xxx.xxx'(Настоящий IP-адрес моего сервера). Вам может потребоваться добавить «xxx.xxx.xxx.xxx» в ALLOWED_HOSTS.
Пара вещей:
- Я знаю, что запросы идут через Nginx, потому что они появляются в журналах Nginx, и было бы невозможно в любом случае непосредственно на сервер gunicorn ударил, потому что я проксировании через сокет UNIX, а не через HTTP.
- Я знаю, что эти запросы исходят от бота, ищущего бесплатные прокси-серверы, но мне это не очень нравится. То, что меня действительно заинтриговало, - это запрос с заголовком
Host
, установленным в путь в локальной файловой системе моего UNIX-гнезда gunicorn/nignx.
Любые подсказки?
У вас есть сайт по умолчанию для nginx? Раньше у меня была проблема, когда хозяин не соответствовал ни одному из имен сервера, который он обслуживал первым, найденным в алфавитном порядке. – cdvv7788
http://nginx.org/en/docs/http/request_processing.html –
@ cdvv7788 У меня нет сервера по умолчанию, поэтому я думаю, что это, вероятно, так. Я собираюсь проверить этот день. – sanfilippopablo