Condition to match a missing "Host:" header
Igor Sysoev
is at rambler-co.ru
Thu Aug 21 20:45:40 MSD 2008
On Thu, Aug 21, 2008 at 04:16:53PM +0000, Luigi Perroti wrote:
> Igor Sysoev <is at ...> writes:
>
> > Why do you need to test it ?
> > Have you tried the configuration in my previous mail ?
>
> Yes, I tried what you suggested.
> Now I have a better understanding of how nginx works, thank you.
>
> As of now I've come up with a configuration file that works fine for the
> application that I'll have to run.
>
> The only thing is that, with this configuration, when no "Host:" header is sent
> by the client nginx will handle this with a 400 code directly. The application
> won't receive the request. Since this application does access logging by itself
> I disabled access logging in nginx.
>
> But I would like to turn it back on for requests where no Host header is
> specified. Otherwise I'd have no way to know about these requests.
>
> I also do this when my custom error pages are called directly.
>
> The relevant part of my config file can be found here: http://pastebin.com/mc05d231
>
> Note that although it might be written better this does exactly what I want.
> Except for the fact that I can't have nginx log to access.log the requests with
> no Host header, and I can't get my application to handle them either.
You need just:
location = /400.html {
root /www/errors;
internal;
access_log /var/log/nginx/access.log;
}
Also, any "if ($request_uri = '/404.html')" means that you should write
location = /404.html {
instead.
BTW, in 0.7.12 the special server_name "" will allow to handle
requests without Host not in default listening server:
server {
listen 80 default;
server_name _;
}
server {
listen 80;
server_name www.example.com "";
}
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list