Назад | Перейти на главную страницу

Nginx - разрешить запросы без заголовка хоста

Когда Nginx получает запрос, в котором отсутствует заголовок Host, он отклоняет его с ответом 400. Как это должно.

Есть ли способ обойти это?

Есть какое-то оборудование, которое должно иметь возможность выполнять вызовы REST на мой веб-сервер Nginx, но это устройство не отправляет заголовок Host. Я ничего не могу с этим поделать, я не могу контролировать внутреннюю работу этого устройства.

Это будет единственное устройство, связывающееся с моим веб-сервером, у которого отсутствует заголовок Host, и оно всегда будет подключено к одному и тому же месту. Сервер использует виртуальные хосты на основе имен.

Я пробовал перестроить свой сервер, используя заголовки-больше-nginx модуль, поскольку я считаю, что он может добавлять заголовки к запросам до их обработки. Я добавил следующую строку в блок server {} для этого виртуального хоста:

more_set_input_headers  "Host: device.myserver.com";

Но запросы все еще отклоняются с 400.

Редактировать:

Я забыл упомянуть, что эти устройства в настоящее время могут делать запросы к веб-серверу lighttpd 1.4.28. Я пытаюсь заставить их работать на Nginx. Я не могу найти ничего особенного в файлах конфигурации lighttpd, которые должны позволять этому работать, похоже, что lighttpd просто не требует этого заголовка.

Изменить 2:

Результаты tcpdump (я исключил то, что не нужно выкладывать в сеть):

POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 62

user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Set-Cookie: PHPSESSID=XXX; path=/
Set-Cookie: username=XXX; path=/
Set-Cookie: password=XXX; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html
Transfer-Encoding: chunked
Date: Thu, 03 Dec 2015 19:37:56 GMT
Server: lighttpd/1.4.28

46

!]HdEU
{"XXX":"XXX","XXX":"XXX","parameters":[]}
0

Отсюда: http://nginx.org/en/docs/http/server_names.html

Разные имена

Некоторые имена серверов обрабатываются особым образом.

Если требуется обрабатывать запросы без поля заголовка «Хост» в блоке сервера, который не является значением по умолчанию, следует указать пустое имя:

server {
    listen       80;
    server_name  example.org  www.example.org  "";
    ...
}

Если в блоке server не определено имя server_name, тогда nginx использует пустое имя в качестве имени сервера.

Так что добавление "" к вашему server_name, кажется, делает то, что вы хотите.