Nginx - Permitir pedidos sem um cabeçalho de host

2

Quando o Nginx recebe uma solicitação sem o cabeçalho do Host, ele o rejeita com uma resposta de 400. Como deveria.

Existe alguma maneira de contornar isso?

Há um hardware que precisa fazer chamadas REST para meu servidor da Web Nginx, mas esse dispositivo não está enviando um cabeçalho de host. Não há nada que eu possa fazer sobre isso, não tenho controle sobre o funcionamento interno deste dispositivo.

Esse será o único dispositivo que está se comunicando com o meu servidor da Web sem um cabeçalho de host e sempre estará conectado ao mesmo local. O servidor está usando hosts virtuais baseados em nome.

Eu tentei recriar meu servidor usando o módulo headers-more-nginx , já que eu Acredito que ele pode adicionar cabeçalhos a solicitações antes que elas sejam processadas. Eu adicionei a seguinte linha ao servidor {} block para este host virtual:

more_set_input_headers  "Host: device.myserver.com";

Mas as solicitações ainda estão sendo rejeitadas com um 400.

Editar:

Esqueci de mencionar que esses dispositivos atualmente podem fazer solicitações para um servidor da Web lighttpd 1.4.28. Estou tentando fazer com que eles trabalhem no Nginx. Não consigo encontrar nada de especial nos arquivos de configuração lighttpd que devem permitir que isso funcione, parece que o lighttpd simplesmente não requer esse cabeçalho.

Editar 2:

Resultados do tcpdump (Eu fiz X as coisas que eu não deveria colocar online):

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
    
por Chris.B 03.12.2015 / 17:52

1 resposta

2

A partir daqui: link

Miscellaneous names

There are some server names that are treated specially.

If it is required to process requests without the “Host” header field in a server block which is not the default, an empty name should be specified:

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

If no server_name is defined in a server block then nginx uses the empty name as the server name.

Portanto, adicionar "" ao seu server_name parece fazer o que você deseja.

    
por 03.12.2015 / 17:58