Strange map $request issue

For example:

map $request $testvar {
default 0;
~*montytest 1;
}

if ($testvar) { return 412; }

[20/Jun/2014:xx:xx:20 +0200] 69.64.xxxx:52393 - - “GET /montytest/
HTTP/1.1”
412 712 “-” "Mozilla/5.0…

[20/Jun/2014:xx:xx:29 +0200] 115.254.xxxx:59855 - - “HEAD /montytest/
HTTP/1.1” 400 0 “-” “-” “-” -

Why does a GET work but not a HEAD ??

Posted at Nginx Forum:

Hello!

On Fri, Jun 20, 2014 at 09:05:44AM -0400, itpp2012 wrote:

412 712 “-” "Mozilla/5.0…

[20/Jun/2014:xx:xx:29 +0200] 115.254.xxxx:59855 - - “HEAD /montytest/
HTTP/1.1” 400 0 “-” “-” “-” -

Why does a GET work but not a HEAD ??

It looks like the HEAD request was invalid, and hence 400 was
returned before any further processing. The reason why 400 was
returned should be in error log at info level.


Maxim D.
http://nginx.org/

The log entries are both in access.log, nothing in error.log, maybe a
try_files thing ? though the IF is after try_files and works for a GET.

Posted at Nginx Forum:

Hello!

On Fri, Jun 20, 2014 at 09:35:20AM -0400, itpp2012 wrote:

The log entries are both in access.log, nothing in error.log, maybe a
try_files thing ? though the IF is after try_files and works for a GET.

Note that you have to configure error_log to log “info” level
messages. By default, logging level is “error”.

http://nginx.org/r/error_log


Maxim D.
http://nginx.org/

It was a malformed request so a 400 is correct, a valid HEAD in this
case
does return a 412.

Posted at Nginx Forum: