Hi Aleks,
Thanks for the info.
Some of the default config we corrected in the prod.
Let me clarify you on whatz working and whatz not working for us with option
http-proxy
Config:
listen http_proxy-1000
bind *:1000
mode http
option httplog
http-request set-uri http://%[url_param(redirHost)]%[capture.req.uri]
option http_proxy
reqUrl :
http://<haproxyhost>:1000/test/health.txt?redirHost:<destinationServer>:<port>
this gets converted to:
http://
<destinationServer>:<port>/test/health.txt?redirHost:<destinationServer>:<port>
This config in the log still says <noserv> but option http_proxy will route to
the updated url and I get 200 OK
this is our intended behavior and works fine
What's not working for us is if we have to do this for https
listen http_proxy-1000
bind *:1000 ssl test.pem
mode http
option httplog
http-request set-uri https://%[url_param(redirHost)]%[capture.req.uri]
option http_proxy
Hope this helps.
Thanks,
Praveen.
-----Original Message-----
From: Aleksandar Lazic [mailto:[email protected]]
Sent: Tuesday, May 08, 2018 4:55 PM
To: UPPALAPATI, PRAVEEN <[email protected]>; [email protected]
Subject: 502 Bad Gateway
Hi.
Looks like there is some confusion about your question.
Let me try to summarize what I think that you could mean.
Am 08.05.2018 um 16:22 schrieb UPPALAPATI, PRAVEEN:
> Hi Aleks,
>
> Sorry I missed the group.
>
> My Full Config:
>
> #---------------------------------------------------------------------
> # Example configuration for a possible web application. See the
> # full configuration options online.
> #
> #
> https://urldefense.proofpoint.com/v2/url?u=http-3A__haproxy.1wt.eu_download_1.3_doc_configuration.txt&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=C4BCJfT0RK1be2KQmPIHso7q5thkyKsIk1ouBDtjtaE&e=
>
This should be
https://urldefense.proofpoint.com/v2/url?u=https-3A__www.haproxy.org_download_1.8_doc_configuration.txt&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=q4U8esi96_sOL0XvcAS53n77UDq1oCz3zVhsj6sPHVQ&e=
or
https://urldefense.proofpoint.com/v2/url?u=https-3A__cbonte.github.io_haproxy-2Ddconv_1.8_configuration.html&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=mVj1QMb_Ass1oDZB-LXh4cJl_3_UTYoRPxNsxQncTNY&e=
> #---------------------------------------------------------------------
>
> #---------------------------------------------------------------------
> # Global settings
> #---------------------------------------------------------------------
> global
> log 127.0.0.1:514 local0 info alert
> log 127.0.0.1:514 local2 info alert
> maxconn 20000
> user haproxy
> group haproxy
> daemon
> nbthread 4
> ssl-server-verify none
>
> tune.ssl.default-dh-param 2048
>
>
>
> #---------------------------------------------------------------------
> # common defaults that all the 'listen' and 'backend' sections will
> # use if not designated in their block
> #---------------------------------------------------------------------
> defaults
>
> log global
> mode http
> option dontlognull
> rate-limit sessions 6000
> timeout connect 300000 # default 10 second time out if a backend is not
> found
The comment is not true.
The current timeout is 300s
https://urldefense.proofpoint.com/v2/url?u=https-3A__cbonte.github.io_haproxy-2Ddconv_1.8_configuration.html-232.4&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=0go0CAnboRAg0FIQf1rqTaUbPxDeuEfStrtb0ul5Z4k&e=
> timeout client 6600000
> timeout server 6600000
This is 110m ~ 1.8 hours
> option http-server-close
> maxconn 20000
> retries 3
>
>
> listen http_proxy-1000
> bind *:1000
> mode http
> option httplog
> http-request set-uri
> https://urldefense.proofpoint.com/v2/url?u=https-3A__-25-5Burl-5Fparam-28redirHost-29-5D-25-5Bcapture.req.uri-5D&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=Enzg1AulwX2G4bls9I-eiwsFm-vC1gYMGz0GPEpR89o&e=
>
> option http_proxy
> #---------------------------------------------------------------------
I miss here the server line.
> I also tried :
>
> listen http_proxy-1000
> bind *:1000 ssl crt certs.pem
> mode http
> option httplog
> http-request set-uri
> https://urldefense.proofpoint.com/v2/url?u=https-3A__-25-5Burl-5Fparam-28redirHost-29-5D-25-5Bcapture.req.uri-5D&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=Enzg1AulwX2G4bls9I-eiwsFm-vC1gYMGz0GPEpR89o&e=
>
> option http_proxy
Same here.
I tried also both configs and have the same result '<NOSRV>' as you have.
Your line
>> http-9876~ bk_9876/<NOSRV> 0/0/1/-1/2 502 211 - - PH-- 1/1/0/0/0 0/0 "GET
/test/test.txt?idnsredirHost=<destinationhost>:5300 HTTP/1.1"
>>
My Test
###
May 8 22:52:54 app001 haproxy[5141]: Proxy http_proxy-1000 started.
May 8 22:52:59 app001 haproxy[5141]: 127.0.0.1:52046
[08/May/2018:22:52:59.177] http_proxy-1000
http_proxy-1000/<NOSRV> -1/-1/-1/-1/0 400 187 - - PR-- 1/1/0/0/3 0/0 "GET
/test/test.txt?Host=www.google.com:80 HTTP/1.1"
###
I think that the you need at least ONE server line.
I assume you want to set the destination server dynamically based on the query
parameter
'Host|idnsredirHost|redirHost', it's not clear which parameter you want, as
Shawn mentioned.
Maybe you can take a look into the following links.
https://urldefense.proofpoint.com/v2/url?u=https-3A__discourse.haproxy.org_t_dynamic-2Dserver-2Dselection_149_2&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=ZRhHfBHC6Uu00ktMxf4fzTwMqKN7YQPjlrES6mBRDA0&e=
https://urldefense.proofpoint.com/v2/url?u=https-3A__www.egnyte.com_blog_2017_04_dynamic-2Dbackends-2Din-2Dhaproxy-2Dwith-2Dlua_&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=YcEYgyPUHsGsau3PttfPLca26yyBLqDGv3onjyiBVtY&e=
Is this what you need?
>> HAProxy Version :
>
> //opt/app/haproxy/sbin/haproxy -vv
> HA-Proxy version 1.8.4-1deb90d 2018/02/08
[snipp]
>> Was the acl below helpfull?
> Yes and also wanted to know if there is a way to print o/p of : hdr_beg(host)
> for debug purposes
You can capture the host header the captured one will be displayed in the logs.
I don't think that you only can get the result of `hdr_beg(host)` easily, maybe
I'm wrong.
https://urldefense.proofpoint.com/v2/url?u=https-3A__cbonte.github.io_haproxy-2Ddconv_1.8_configuration.html-234.2-2Dcapture-2520request-2520header&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=z6c842RukY_SP9qpAA7lFdR032fMh2Ko1cj5mxqeLPI&s=3h2iuYZHv2LKLc2sQwlp4kKRyksmDOdijU7C9fLnI7c&e=
Config:
```
capture request header Host len 15
```
```
ubuntu@app001:~$ curl -v
'http://localhost:1000/test/test.txt?Host=www.google.com:80'
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 1000 (#0)
> GET /test/test.txt?Host=www.google.com:80 HTTP/1.1
> Host: localhost:1000
> User-Agent: curl/7.47.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 400 Bad request
< Cache-Control: no-cache
< Connection: close
< Content-Type: text/html
<
<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
* Closing connection 0
ubuntu@app001:~$ fg
sudo tail -f /var/log/haproxy.log
May 8 23:37:54 app001 haproxy[8804]: Proxy http_proxy-1000 started.
May 8 23:37:58 app001 haproxy[8804]: 127.0.0.1:35988
[08/May/2018:23:37:58.074] http_proxy-1000
http_proxy-1000/<NOSRV> -1/-1/-1/-1/0 400 187 - - PR-- 1/1/0/0/3 0/0
{localhost:1000} "GET
/test/test.txt?Host=www.google.com:80 HTTP/1.1"
```
Best regards
Aleks
> Thanks,
> Praveen.
>
> -----Original Message-----
> From: Aleksandar Lazic [mailto:[email protected]]
> Sent: Tuesday, May 08, 2018 7:40 AM
> To: UPPALAPATI, PRAVEEN <[email protected]>; [email protected]
> Subject: Re: 502 Bad Gateway
>
> Hi.
>
> Please post only to the mailing list, thanks.
> Please keep the mailinglist in the mail loop => "Answer all".
>
> Am 08.05.2018 um 07:25 schrieb UPPALAPATI, PRAVEEN:
>> Hi Haproxy-Team,
>>
>> I have the following configuration:
>>
>> listen http_proxy-1000
>> bind *:1000
>> mode http
>> option httplog
>> http-request set-uri
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__-25-5Burl-5Fparam-28redirHost-29-5D-25-5Bcapture.req.uri-5D&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=t6xdq_k-rDqDEV6GmhRRj82gitY4t9bgda30YThyHHs&s=6xIYqpeCV09krEHS_i6n3zf7hYuKGEadSHB9ny25O7g&e=
>>
>> option http_proxy
>
> This isn't the whole config, isn't it?
>
> The 'url_param' does not match the request below, afais.
>
> Please can you answer the following questions.
>
> Which HAProxy Version do you use?
> What's the whole HAProxy config?
> Was the acl below helpfull?
>
> Regards
> Aleks
>
>> If I issue a request to that port :
>>
>> https://<haproxyHost>:1000
>> /test/test.txt?Host=<desthost>:8093
>>
>> I get <BadReq>
>>
>> If I add ssl termination to the config:
>>
>> listen http_proxy-1000
>> bind *:1000 ssl test.pem
>> mode http
>> option httplog
>> http-request set-uri
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__-25-5Burl-5Fparam-28redirHost-29-5D-25-5Bcapture.req.uri-5D&d=DwIFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=V0kSKiLhQKpOQLIjj3-g9Q&m=t6xdq_k-rDqDEV6GmhRRj82gitY4t9bgda30YThyHHs&s=6xIYqpeCV09krEHS_i6n3zf7hYuKGEadSHB9ny25O7g&e=
>>
>> option http_proxy
>>
>>
>> I get :
>> http-9876~ bk_9876/<NOSRV> 0/0/1/-1/2 502 211 - - PH-- 1/1/0/0/0 0/0 "GET
>> /test/test.txt?idnsredirHost=<destinationhost>:5300 HTTP/1.1"
>>
>> I have also set :
>>
>> ssl-server-verify none
>>
>> @global still no luck.
>>
>> Let me know if I am missing anything .
>>
>> Thanks,
>> Praveen.
>>
>>
>> -----Original Message-----
>> From: Aleksandar Lazic [mailto:[email protected]]
>> Sent: Tuesday, May 01, 2018 7:22 AM
>> To: UPPALAPATI, PRAVEEN <[email protected]>; Willy Tarreau <[email protected]>
>> Cc: Olivier Houchard <[email protected]>; [email protected]
>> Subject: Re: Logging Question
>>
>> Hi.
>>
>> Am 30.04.2018 um 19:05 schrieb UPPALAPATI, PRAVEEN:
>>>
>>> Hi Willy/Oliver,
>>>
>>> One small question:
>>>
>>> When I capture the header it's returning xxxx.com in the log but when I
>>> perform Get on xxxx.com:1000 it is not matching the following configuration.
>>>
>>> frontend http-1000
>>> bind *:1000
>>> option httplog
>>> capture request header Host len 20
>>> acl is_east hdr(host) -i xxxx.com
>>
>> Maybe this helps?
>>
>> acl is_east hdr_beg(host) -i xxxx.com
>>
>>> use_backend east_bk_1000_read if is_east
>>>
>>> My question is how can I print o/p of hdr(host) & is_east to log?
>>>
>>> Appreciate your help.
>>>
>>> Thanks,
>>> Praveen.
>>
>> Regards
>> Aleks
>>
>