Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I would like Nginx to 444 when processing a request without a host header.

I have read http://nginx.org/en/docs/http/request_processing.html and Nginx default host when not defined, where it says:

"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."

I've configured

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;
}

Then I request

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

and receive a 400, not the 444 I expected:

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]

The same happens when I

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

How can I get Nginx to 444 when no host header is provided? Is this not possible if the the server considers the request a bad request?

share|improve this question

HTTP 1.1 requests must contain a host header. If they don't do so, a server must reply with error 400. See also RFC 2316, section 14.23

share|improve this answer
    
Good! Thank you Dennis. – dimadima Nov 28 '12 at 21:16

You can still catch the 400 error and return a 444 instead. The following worked for me on requests without a Host header

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

PS you still get a 400 if you don't send a GET /xxx HTTP/1.x, POST /xxx HTTP/1.x, HEAD /xxx HTTP/1.x, or strangely just GET /.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.