Quantcast
Channel: Serverphorums.com - HAProxy
Viewing all articles
Browse latest Browse all 5112

fields vs word converter, unexpected "0" result (3 replies)

$
0
0
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 <willy@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.schneller@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

Viewing all articles
Browse latest Browse all 5112

Trending Articles