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
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?
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
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 /
.
Tags nginx