Hi!

First, the basics:

----------------------
root@haproxy-1:~# haproxy -vv
HA-Proxy version 1.6.13-1ppa1~trusty 2017/06/19
Copyright 2000-2017 Willy Tarreau <wi...@haproxy.org>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat 
-Werror=format-security -D_FORTIFY_SOURCE=2
  OPTIONS = USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_NS=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200




root@haproxy-1:/vagrant# cat mini.cfg

global
  log /dev/log len 350 local0 info
  stats socket /var/run/haproxy.stat user haproxy group haproxy mode 600 level 
admin

defaults
  mode http
  log global
  option httplog
  option dontlognull
  option http-keep-alive
  option redispatch
  timeout http-request 10s
  timeout queue 1m
  timeout connect 5s
  timeout client 2m
  timeout server 2m
  timeout http-keep-alive 10s
  timeout check 5s
  retries 3
  maxconn 2000


listen demo
  bind 127.0.0.1:8881
  log-format %ci:%cp\ [%t]\ %{+Q}[var(txn.host),lower,word(2,'.')]
  http-request set-var(txn.host) req.hdr(Host)
  server dummy dummy:8081 check
———————————


I need to log the 2nd subdomain of any incoming request. The above is the 
minimum config
I used to demo this behaviour, the actual one is a bit more involved ;)

First question: What is the difference between the “word” and “field” 
converters?
I tried both, but the behavior described below is the same regardless.



Now, this is what confuses me (request interleaved with corresponding log line):

root@haproxy-1:~# curl -s http://127.0.0.1:8881 -H "Host: aa.bb.cc”
Aug  1 15:12:42 haproxy-1 haproxy[3049]: 127.0.0.1:45868 
[01/Aug/2017:15:12:42.528] "bb"


root@haproxy-1:~# curl -s http://127.0.0.1:8881 -H "Host: cc"
Aug  1 15:12:47 haproxy-1 haproxy[3049]: 127.0.0.1:45871 
[01/Aug/2017:15:12:47.296] ""


root@haproxy-1:~# curl -s http://127.0.0.1:8881 -H "Host:"
Aug  1 15:12:50 haproxy-1 haproxy[3049]: 127.0.0.1:45872 
[01/Aug/2017:15:12:50.695] ""


root@haproxy-1:~# curl -s http://127.0.0.1:8881
Aug  1 15:12:55 haproxy-1 haproxy[3049]: 127.0.0.1:45875 
[01/Aug/2017:15:12:55.198] "0"


While the first three are expected, the last one confuses me. Why would leaving 
the header out result in “0” being logged?

Ideally, I’d like this to show as “-“, but empty string would be fine, too.
But “0” is pretty counter-intuitive.

It’s not strictly horrible, but at least it is unexpected and would also 
collide with cases where the actual 2nd subdomain was called “0”.

Is this a bug, or am I doing something wrong? 


Thanks,
Daniel

-- 
Daniel Schneller
Principal Cloud Engineer
 
CenterDevice GmbH                  | Hochstraße 11
                                   | 42697 Solingen
tel: +49 1754155711                | Deutschland
daniel.schnel...@centerdevice.de   | www.centerdevice.de

Geschäftsführung: Dr. Patrick Peschlow, Dr. Lukas Pustina,
Michael Rosbach, Handelsregister-Nr.: HRB 18655,
HR-Gericht: Bonn, USt-IdNr.: DE-815299431



Reply via email to