Solicitações de processamento Nginx sem um cabeçalho de host

1

Eu gostaria que o Nginx to 444 ao processar uma solicitação sem um host header.

Eu li o link e host padrão Nginx quando não definido , onde diz:

"If its value does not match any server name, or the request does not contain
this header field at all, then nginx will route the request to the default server 
for this port."

Eu configurei

server {
  listen 80 default_server;

  # Since version 0.8.48, this is the default setting for the server name, 
  # so the server_name "" can be omitted.
  # server_name "";

  return 444;
}

Então eu peço

telnet localhost 80<enter>
GET / HTTP/1.1<enter>
<enter>

e receba um 400 , não o 444 esperado:

HTTP/1.1 400 Bad Request
Server: nginx/1.2.5
Date: Wed, 28 Nov 2012 21:01:59 GMT
Content-Type: text/html
Content-Length: 172
Connection: close

[body]

O mesmo acontece quando eu

telnet localhost 80<enter>
GET / HTTP/1.1<enter>
Host:<enter>

Como posso obter o Nginx para o 444 quando nenhum cabeçalho host é fornecido? Isso não é possível se o servidor considerar a solicitação uma solicitação incorreta?

    
por Dmitry Minkovsky 28.11.2012 / 22:12

2 respostas

4

As solicitações HTTP 1.1 devem conter um cabeçalho de host. Se eles não o fizerem, um servidor deve responder com erro 400. Consulte também RFC 2316 seção 14.23

    
por 28.11.2012 / 22:15
3

Você ainda pode pegar o erro 400 e retornar um 444. O seguinte funcionou para mim em solicitações sem um Host header

server {
        listen      80;
        server_name "";
        return      444;
        error_page 400 = @400;
        location @400 {
                return 444;
        }
}

PS: você ainda receberá um 400 se não enviar GET /xxx HTTP/1.x , POST /xxx HTTP/1.x , HEAD /xxx HTTP/1.x ou estranhamente apenas GET / .

    
por 28.01.2016 / 18:01

Tags