I suspect I just don't understand "http-response"'s syntax, or I might have 
discovered a bug.

What I'm trying to do:

I need to have haproxy intercept backend server responses containing an HTTP 
Location header, and change the "http:" of the URL in the contents to "https:" 
IF the session is over SSL and IF the FQDN in the URL in the Location header 
is, say, "*.something.edu".

Here's how I'm doing it today (inside the frontend), and it works:

acl port-443 dst_port 443
rsprep ^(Location:\ http)(://[^/]*\.something\.edu.*) \1s\2 if port-443

Here's how I'd like to do it using "http-response":

http-response replace-header Location (http)(://[^/]*\.something\.edu.*) \1s\2  
     if { ssl_fc }

When I run an "haproxy -c" on the http-response config, I'm greeted with:

[ALERT] 209/213332 (25548) : parsing [./haproxy.cfg:43]: 'http-request 
replace-header' expects exactly 3 arguments.

When I remove the "if" portion at the end of the http-response line, it checks 
fine. I've tried it with multiple different "if" conditions (using various 
types of acls). If there is any "if" condition, the above error appears.

It also concerns me that the error specifies "http-request replace-header", 
when the config is actually an "http-response replace-header", but that could 
just be simple typo. I'm more concerned that I can't seem to get it to accept 
an "if" condition.

I'm very open to the explanation being "oh, well, you configured the line 
wrong; you forgot to...". I'm out of ideas, though.

I'm using 1.5.1, but I've tried the config using 1.5.0 and 1.5.3, and the 
result is the same. Here's my build info (compiled on CentOS 6.5), if it makes 
a difference:

-------------------------------
HA-Proxy version 1.5.3 2014/07/25
Copyright 2000-2014 Willy Tarreau <w...@1wt.eu>

Build options :
  TARGET  = linux2632
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing
  OPTIONS = USE_ZLIB=1 USE_POLL=default USE_OPENSSL=1 USE_PCRE=1

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

Encrypted password support via crypt(3): no
Built with zlib version : 1.2.3
Compression algorithms supported : identity, deflate, gzip
Built with OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
Running on OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 7.8 2008-09-05
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IP_FREEBIND

Available polling systems :
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 2 (2 usable), will use poll.
-------------------------------

Any thoughts?

 - Jon


 NOTICE: This email message is for the sole use of the intended recipient(s) 
and may contain confidential and privileged information. Any unauthorized 
review, use, disclosure or distribution is prohibited. If you are not the 
intended recipient, please contact the sender by reply email and destroy all 
copies of the original message.

Reply via email to