From f18a06df41a0a847bdd26bf5ba738639400f547e Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Sat, 12 Nov 2022 12:24:35 +0100 Subject: [PATCH] update slides and code --- etc/haproxy/haproxy.cfg | 13 ++++++++----- slides.odp | Bin 1419081 -> 1419081 bytes slides.pdf | Bin 1659664 -> 1659682 bytes 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/etc/haproxy/haproxy.cfg b/etc/haproxy/haproxy.cfg index cad172f..a89823c 100644 --- a/etc/haproxy/haproxy.cfg +++ b/etc/haproxy/haproxy.cfg @@ -111,8 +111,6 @@ frontend external bind 0.0.0.0:80,:::80 bind 0.0.0.0:443,:::443 ssl strict-sni alpn h2,http/1.1 crt /etc/haproxy/ssl - capture request header Host len 32 - option forwardfor errorfiles boost-default-errors @@ -123,8 +121,10 @@ frontend external # Remove a possible x-forwarded-for header already present http-request del-header x-forwarded-for if { req.hdr(x-forwarded-for) -m found } - # store the Host header in lowercase, to speedup ACL later + # Store the Host header in lowercase, to speedup ACL later http-request set-var(req.hdr_host) req.hdr(host),lower + # Capture host header in logs + http-request capture var(req.hdr_host) len 32 # Is the request coming for the server itself (stats…) acl self var(req.hdr_host) -m str my-hostname my-hostname.domain.tld @@ -220,13 +220,16 @@ backend goto_internal frontend internal bind /run/haproxy-frontend-default.sock user root mode 666 accept-proxy - capture request header Host len 32 - option forwardfor # Check URL (used by Varnish) monitor-uri /haproxycheck + # Store the Host header in lowercase, to speedup ACL later + http-request set-var(req.hdr_host) req.hdr(host),lower + # Capture host header in logs + http-request capture var(req.hdr_host) len 32 + acl varnish_from hdr(X-Varnish) -m found acl forwarded_proto hdr(x-forwarded-proto) -m found diff --git a/slides.odp b/slides.odp index 2b423fc3e2b52dcb36b2e457e09098f69c902f3a..19724f9795da185beded0739d4dd871e4f185ea8 100644 GIT binary patch delta 5040 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 diff --git a/slides.pdf b/slides.pdf index b2c77254556b6bcf26b8ca25e2084bd4fff01e93..452c681412796b4c79b27ee8f09f2cb2f7bd43f4 100644 GIT binary patch delta 5377 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 delta 5406 zcmZuz3s_BQ7uIp>q9|P?x)_aWQhR^m6m!%91R_xra_6)GhrzD;^r2V$rGW1GICh9`PRx+vF2(2Gz5bYPV7_RR{*2HGX_9!ib=yOmg8ek7W_@kmR+n>Z?Qu8LBuw8} zCuro|rwNpoKM{Ff+unD`la+xg67`zt8Pil(J-D2wq*Hko31Nj1T(La&Jc*c2C{WA}>3c8kar6!!)C`wP1Ob^OWH)s-`P>rIugSuvnkH z#^8j;PW{NCKFK5Y7+RsPqxoH_E*labNerd7u-5|>}h(Y1%KS-Z};o(&01P# zo$6hmzd7dDkzcL5^K3=RwfgR6SGAn<9i_2)LEa%&4weZ!7iD2|y7umP|NMdvxn;AJ zYwYJ6+kAYIvn*G;vD`0j!RuJ9C00X8tWvA3-b5!hVMWI{&4+#=6&EGV<_;N0y6LhG z$Ck!1#V)!2DMK2Prx}$i@I-biS7H1tNX=xPPf+<$=l8EirC3UACCBrFvu#|jD_u-A zVv2GPPYkb)4^J>JKON>cY|(6@Q+2&E6@I5L z1e?ed(h|}R8oDu>90w-^B<~b9eh`{LS1U>qmD;RkLpq|3aK;KOf}UnE6ceZ-?06(EcWJZ z%5%?)fb`-s4J8Z1RTS0qW|n)^sx__;St(PTHb0frQMxnTH{8oOF5dL%kIoH6>i;VA ztjaBa^3w(NQtJ?#j3;1)lCuhbynEP?A&mFVr}2gBu(i>bCM1U_c`JI}2wjt3PmKLbsbBtjal|TVM&y!hJ_WD7 zc5}7KDXcI(Q=Vy2@J4k%XxBHpl$5=TpUWsbO9F;DCG)HERuwIv?-hzd|K&ZKYm=FZ zQzoYG4(`}DrdnoI8lL4Dda-!RZl|_n>zIh6=jJ#?DOau9{d((i_vC}yo6a8gnNfJF z?8rePSQpqW``+1gQK^P(X7gm~s}Pyn0m-JeDd*`^FnwrtGxtxnEzNB@k#XNJ(h!K0U3x{>4l}|aW z-6pY0da#k?+#`q87dS_HBs(~VD;IBBI&RLAQlqNWE4r=9o!es~cZOfv@qNnZ{G748 z+7ITXejf}Tt@_SXH_bE7VPa#2eQfc>`$tQ*YFa+swQYm%A(IvRJPw(VtyK*Uc!w zmjSU!rrCzl%#wh(-^$3!89H%)Cwb+XuAwdV&kq@4Q6HbL^~Phzw?zvB!HO#}LHpXt zoqDag_P&8*YmZ?s@TBS`O%91;?9V*d)gJgkn{_=L?w<9MntHU>@K3_aD)7X2!8s1I zXJ0ntvrA@e538MUI_f~J>aMHa)^4^&p_PW&WMqR#(jE}TbWEOT-aD&_c^LNmXhcZF zRNMJEue!>X{4@0Ak>8lL(KnT6am=i`pEsLF)YQ~2tUlz_67{t><*Dzttxk#)%Hp@Q zedtjtsEb$1jEf6!(mJeFlF(e0;kb00{du3M#nb9}`-ytZDT~Xze>g%#M}}V+i%m{D z;57c_FwkQ8z=~YR+b&GL+FNhG+@>_IvgO(Vm5aCb*J(0wi9q{gUErKI?S9WyA9|}^ z`_?11EB40ahCSh;O%;>ZJ6`gL>27~;-B4oT9V5-5 zf7qCKRlT;nFhxIFk9B!idD%xb9^U1!RYTZj?xb zaWX?nw?s)qld{%tbw?2aCQJVj71FzjKEP6h>=K+0K{k4A3%>EI|q}3P(>&aST3)gNNy-FiP-2hzU*yF+n{kh9l52Q5?;n zB7_)+21CP+3V75Tj6E2E*AezIzEaM2Q&y^ML4xrCCz&JpyM23zNqIL*N{m1%?1PT6Y#O++b%MKoSh~g&06Z$TF}O z(Eu6Pcsv4f6#jnHxGMoPY4w zCqnr!LkAMXpoRxWEyqZt?gR@+2B|wFAz6VPNn!oj;y>Se(2yaKbU}<05VI7VaY!&M zMF@#0g6k*g33dLAJf4bP@ z`R_|V1ur`qNj1g635>KSBw^8hhjvgj$mv)D^beZ81&?E3zYo~S`Elqh7@07u4BFci z2VnjOoaMeWU^xOk9mff-Z5qG`5n;k!=LvMNpb3ma7Y67|pktXPaJVX>!EmrB2nJ;Y za|~l0$TajN!KbXk^Y^8nCP=|apdpL46HO8Q+L42_0QsRI zBba8;8L(*7aF(H3fOa&xc+zkiLdQ46NE{6YVmw+qxgn}_IVLC*#L$ff+EId%Knxw# za=R~k;=ukV2hsH#VttF^K$#$h-fVI^66q2-hAbN}(=5#m5-Z&QAjqJtBgY6-ND!kC o1