Dear Susheel Jalali.

Am 12-10-2015 22:06, schrieb Susheel Jalali:
Dear HAProxy Developer community,

We are seeking your inputs in the following issue we are facing:

We would like to access Product1 via URL: , wherein 14443 is port forwarded by
router to 443 inside the server.

Output URL from the Product1 server should be:

Current set up is giving:<APPLICATION_PORT>/Product1/signin?xyz

(1) <APPLICATION_PORT> instead of 14443 (forwarded port).

(2) http, instead of https


Thank you for your insights.  It helped make some progress, but are
short of conquering the final frontier.  Your guidance will be

Setup you advised:  Client -> haproxy -> Product1 app server (Tomcat),
which is talking HTTP in its standard deployment
(http://IP:port/appname) and has no custom rewriting or SSL or other
proxy (Apache or nginx).

Please can you also add the tomcat config and web xml.

As the content is dynamic (real-time video), we are not using Varnish.

Logs and config deployed for HAProxy 1.5.14 (stable)

We are not getting any errors in the logs, as the right Web page is
being displayed.

frontend webapps-frontend
    bind          *:80 name http
    bind          *:443 name https ssl crt /path/to/server.pem

    log           global
    option        forwardfor
    option        httplog clf

    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
    reqadd X-Forwarded-Proto:\ http if !{ ssl_fc }

acl host_https req.hdr(Host) # 14443 is due to
port forwarding deployment
    acl path_subdomain_p1 path_beg -i /Product1

    use_backend subdomain_p1-backend if host_https path_subdomain_p1

backend subdomain_p1-backend
    http-request set-header Host
reqirep ^([^\ ]*)\ /Product1/*([^\ ]*)\ (.*)$ \1\ /Product1\2\

shouldn't be here the <APPLICATION_PORT> in the replacment?

    acl hdr_location res.hdr(Location) -m found
    rspirep ^Location:\ (https?://)([^/]*)(:[0-9]+)(/.*)$ Location:\
\\3\4 if hdr_location

Maybe I misunderstood your request but shouldn't be in the replacement the port 14443?

rspirep ^Location:\ (https?://)([^/]*)(:[0-9]+)(/.*)$ Location:\ \\4 if hdr_location

But still I think you should use


server Product1.VM0 <internal_IPxx.yy.zz.ww:APPLICATION_PORT> cookie
c check

Output of haproxy -f … -db -V
Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result FAILED
Total: 3 (2 usable), will use epoll.

Please can you post some output from the -db thanks.

BR Aleks

Thank you.


Susheel Jalali

Coscend Communications Solutions
Web site: www(DOT)Coscend(DOT)com
CONFIDENTIALITY NOTICE: See 'Confidentiality Notice Regarding E-mail
Messages from Coscend Communications Solutions' posted at:

On 10/08/15 03:50, Aleksandar Lazic wrote:

Dear Susheel Jalali.

Am 07-10-2015 23:24, schrieb Susheel Jalali:

Dear Igor and Aleks,

Thank you for your insights.  Very useful to us, as we are
HAProxy for the first time.  Below we have described how we have
implemented your advise and the result. Output of "haproxy -vv" is
given at end.

We have also provided the configuration file and relevant logs.  We
would appreciate any insights to replace the internal IP address
occurring in server-response URL with the externally valid domain
either by using the rewriting of Location and Host headers or the
complete URL, using %HP.

We would like to access Product1 via URL:
Output URL from the Product1 server should be:

what we are getting:   http://Internal_IP:14443/Product1/signin?xyz

Responses to your insights / questions

@ Aleks:  Yes, Tomcat has a reverse proxy setting for our Product1.
Can we
not have two reverse proxies to Product1?

Sorry I do not understand what you mean.

Have your read and understood the proxy-howto?

I assume your setup is like this.


Is this right?

Maybe you can omit apache-mod_proxy_ajp and talk http with tomcat.
Client->haproxy->tomcat-X HTTP Connector

In case that you want to deliver static content you should consider to
use such a setup.

Client->haproxy->varnish->tomcat-X HTTP Connector
Client->haproxy->nginx+cache->tomcat-X HTTP Connector

Take care that you setup one of the *NIO* or *Apr* protocol handler


(1) As you rightly pointed out, we are getting http, not https

(2) As you advised, we moved these two lines from backend to
but did not find any change.

acl hdr_location res.hdr(Location) -m found
rspirep ^(Location:)\ (https?://([^/]*))/(.*)$    \1\
http://\3/Product1/\4 if hdr_location

Maybe you can offer (gist,download,...) some debug output from

haproxy -f ... ... -db -V'

(3) Configuration file

log local2
log-tag     haproxy
chroot      /var/haproxy/lib
pidfile     /var/run/
user        haproxy
group       haproxy
nbproc      1
maxconn     5000
spread-checks 5
stats socket  /var/haproxy/lib/stats

#   SSL section
maxsslconn     256
tune.ssl.default-dh-param 4096
ca-base /path/to/directory/of/server.pem


# Defaults


mode        http
log         global
option      httplog
option      forwardfor
option      abortonclose
option      http-server-close
option      redispatch
retries     3
timeout queue           10s
timeout client          50000ms
timeout server          50000ms
timeout connect         5000ms
timeout http-keep-alive 10s
timeout http-request    5s
timeout check           10s
maxconn                 50000

frontend webapps-frontend
bind          *:80 name http
bind          *:443 name https ssl crt /path/to/server.pem

How about to change to two frontends

frontend http-frontend
bind          *:80 name http
... other frontend settings

frontend https-frontend
bind          *:443 name https ssl crt /path/to/server.pem
... other frontend settings

Then you can setup the tomcat connector for https to


Please take a look at this howto.

I prefer to setup the appserver to work as expected, when it's
possible, and not to do some 'magic' with the rewrites on any proxy



Output of "haproxy -vv":

HA-Proxy version 1.5.14 2015/07/02
Copyright 2000-2015 Willy Tarreau <>

Build options :
TARGET  = linux2628
CPU     = native
CC      = gcc
CFLAGS  = -m64 -march=x86-64 -O2 -march=native -g

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

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
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 : 8.32 2012-11-30
PCRE library supports JIT : yes
Built with transparent proxy support using: CTTPROXY IP_TRANSPARENT

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



BR Aleks

No virus found in this message.
Checked by AVG - [1]
Version: 2015.0.6140 / Virus Database: 4435/10778 - Release Date:


Reply via email to