This information may also help:

haproxy -vv
HA-Proxy version 1.6.11 2016/12/25
Copyright 2000-2016 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux2628
  CPU     = native
  CC      = gcc
  CFLAGS  = -O2 -march=native -g -fno-strict-aliasing 
-Wdeclaration-after-statement
  OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_STATIC_PCRE=1

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

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.8
Running on zlib version : 1.2.8
Compression algorithms supported : identity("identity"), deflate("deflate"), 
raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.0.1k-fips 8 Jan 2015
Running on OpenSSL version : OpenSSL 1.0.1k-fips 8 Jan 2015
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.21 2011-12-12
Running on PCRE version : 8.21 2011-12-12
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built without Lua support
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT 
IP_FREEBIND

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.




On 2/14/17, 4:10 PM, "Birdwell, Rob" <[email protected]> wrote:

    Hi Cyril!
    
    Responses below:
    
    Are you really sure you're making the same request on the application side 
(access logs should give you a hint) ?
    
    Positive.  I’m making the curl request directly from the Apache HTTP server 
& HAProxy server.  The details for the HAProxy curl are in the thread way down 
below.  I can share the exact curl command if it helps you (and as long as the 
contents stay between us).  Logs from proxy are directly below:
    
    Feb 14 22:52:06 localhost haproxy[22304]: Proxy globalstats started.
    Feb 14 22:52:06 localhost haproxy[22304]: Proxy www-http started.
    Feb 14 22:52:06 localhost haproxy[22304]: Proxy www-frontend started.
    Feb 14 22:52:06 localhost haproxy[22304]: Proxy www-backend started.
    Feb 14 22:52:10 localhost haproxy[22305]: 34.195.251.10:30874 
[14/Feb/2017:22:52:10.262] www-frontend~ www-backend/lp 67/0/4/6/77 200 158 - - 
---- 1/1/0/1/0 0/0 "POST /chat/request.json?v=1 HTTP/1.1"
    
    
    
    
    
    On 2/14/17, 3:28 PM, "Cyril Bonté" <[email protected]> wrote:
    
        Le 14/02/2017 à 22:20, Birdwell, Rob a écrit :
        > Thanks for the quick reply Cyril!
        >
        > You’re correct on both counts; this is a test config & the large 
timeout will definitely not be kept.  For the http-server-close, that was a 
mistake on my part; thank you for noticing that.  I’ve tried the configuration 
both ways (as far as http-send-name-header) & receive the same result.  Happy 
to try any additional suggestions you can provide.  (BTW, I just tried removing 
the http-send-name-header which gave the same results).
        
        Are you really sure you're making the same request on the application 
        side (access logs should give you a hint) ?
        
        What happens with a curl request on 
        /api/account/61447612/data/request.json?v=1 through haproxy ? (to 
        reproduce the ProxyPass directives in apache). Something like :
        curl -i --header "Accept:application/json" --header 
        "Content-Type:application/json" --header "Authorization:<appname> 
        appKey=<key>" -X POST 
        https://<frontend_url>/api/account/61447612/data/request.json?v=1 
        --verbose --data "{\"data\": { \"data\": \"data\", \"maxWaitTime\": 
        60000 } }" --cacert /etc/haproxy/ssl/<frontend>.pem
        
        
        
        >
        > On 2/14/17, 1:58 PM, "Cyril Bonté" <[email protected]> wrote:
        >
        >     Hi Rob,
        >
        >     Le 14/02/2017 à 20:23, Birdwell, Rob a écrit :
        >     > Hello,
        >     >
        >     > I was curious if someone would be able to assist with return 
codes from HAProxy.  Currently, we are able to receive a 201 for a reverse 
proxy solution from Apache HTTP, but when utilzing HAProxy, only a 200 is 
received utilizing an identical cURL command.  The current HAProxy/Apache HTTP 
& cURL outputs I have are below:
        >     >
        >     > HAProxy configuration:
        >     >
        >     > global
        >     >
        >     >     log         127.0.0.1 local2 debug
        >     >
        >     >     chroot      /var/lib/haproxy
        >     >     pidfile     /var/run/haproxy.pid
        >     >     maxconn     100000
        >     >     group       root
        >     >     daemon
        >     >     tune.ssl.default-dh-param 2048
        >     >
        >     >     stats socket /var/lib/haproxy/stats
        >     >
        >     >
        >     > defaults
        >     >     mode                    http
        >     >     log                     global
        >     >     option                  httplog
        >     >     option                  log-separate-errors
        >     >     option                  dontlognull
        >     >     option                  http-keep-alive
        >     >     option                  dontlog-normal
        >     >     option                  http-server-close
        >
        >     Not related to your issue but you have to make a choice : use
        >     "http-server-close" or "http-keep-alive", but not both.
        >
        >     >     option                  redispatch
        >     >     option                  contstats
        >     >     option                  forwardfor
        >     >     timeout http-request    45s
        >     >     timeout queue           45s
        >     >     timeout connect         45s
        >     >     timeout client          45s
        >     >     timeout server          45s
        >     >     timeout http-keep-alive 45s
        >     >     timeout check           45s
        >
        >     Those timeouts should be better tuned.
        >
        >     >     http-send-name-header host
        >
        >     Here, there's something that can be related to what you observe.
        >     Are you really sure you want to set a "Host" header on the request
        >     between haproxy and your backend server ? Note that it also 
appears in
        >     www-backend below.
        >
        >     >     maxconn                 50000
        >     >
        >     > listen globalstats
        >     >     mode http
        >     >     bind *:1936
        >     >     stats enable
        >     >    stats show-desc HAProxy for <frontend_url>
        >     >     stats uri /stats
        >     >     stats show-legends
        >     >     stats show-node
        >     >     stats refresh 5s
        >     >
        >     > frontend www-http
        >     >    bind *:80
        >     >    reqadd X-Forwarded-Proto:\ http
        >     >    default_backend www-backend
        >     >
        >     > frontend www-frontend
        >     >    bind *:443 ssl crt /etc/haproxy/ssl/<frontend>.pem
        >     >    mode http
        >     >    reqadd X-Forwarded-Proto:\ https
        >     >    default_backend www-backend
        >     >
        >     > backend www-backend
        >     >    redirect scheme https if !{ ssl_fc }
        >     >    http-send-name-header host
        >
        >     Same observation here, I'd recommend to make some tests without 
those
        >     "http-send-name-header host".
        >
        >     >    server lp <backend app>:80 check
        >     >
        >     > Apache config:
        >     >
        >     > NameVirtualHost *:80
        >     > <VirtualHost *:80>
        >     >        ServerName <frontend_url>
        >     >
        >     >        Redirect / https://<backend_app>/api/account/61447612/
        >     >
        >     >
        >     > </VirtualHost>
        >     >
        >     > NameVirtualHost *:443
        >     > <VirtualHost *:443>
        >     >        ServerName <frontend_url>
        >     >        LogLevel debug
        >     >        CustomLog /etc/httpd/logs/ssl_access_log frontoffice
        >     >        ErrorLog /etc/httpd/logs/ssl_access_log
        >     >
        >     >        LimitRequestLine 1000000
        >     >        LimitRequestFieldSize 1000000
        >     >
        >     >        SSLEngine On
        >     >        SSLProxyEngine On
        >     >
        >     >        SSLProxyCheckPeerCN off
        >     >        SSLProxyCheckPeerExpire off
        >     >
        >     >        AllowEncodedSlashes On
        >     >        ProxyPreserveHost On
        >     >
        >     >
        >     >        SSLCertificateFile /etc/httpd/ssl/<frontend_url>.pem
        >     >        SSLCertificateChainFile /etc/httpd/ssl/<frontend_url>.pem
        >     >
        >     >        RewriteEngine On
        >     >
        >     >        ProxyPass              /   
https://<backend_app>/api/account/61447612/  retry=2 acquire=3000 timeout=600 
Keepalive=On
        >     >        ProxyPassReverse       https://<frontend_url>/   
https://<backend_app>/api/account/61447612/
        >     >        ProxyPassReverseCookiePath   
https://<backend_app>/api/account/61447612/ https://<frontend_url>/
        >     >
        >     > </VirtualHost>
        >     >
        >     >
        >     >
        >     >
        >     > Curl command is as follows:
        >     >
        >     > curl -i --header "Accept:application/json" --header 
"Content-Type:application/json" --header "Authorization:<appname> appKey=<key>" 
-X POST https://<frontend_url>/data/request.json?v=1  --verbose --data 
"{\"data\": { \"data\": \"data\", \"maxWaitTime\": 60000 } }" --cacert 
/etc/haproxy/ssl/<frontend>.pem
        >     >
        >     >
        >     >
        >     > Curl output from HAProxy:
        >     >
        >     >
        >     > …
        >     >
        >     >> POST /data/request.json?v=1 HTTP/1.1
        >     >> Host: <frontend_app>
        >     >> User-Agent: curl/7.47.1
        >     >> Accept:application/json
        >     >> Content-Type:application/json
        >     >> Authorization:<appname> appKey=<key>
        >     >> Content-Length: 65
        >     >>
        >     > * upload completely sent off: 65 out of 65 bytes
        >     > < HTTP/1.1 200 OK
        >     > < Server: WS
        >     > < P3P: CP="NON BUS INT NAV COM ADM CON CUR IVA IVD OTP PSA PSD 
TEL SAM"
        >     > < Date: Tue, 14 Feb 2017 07:49:09 GMT
        >     > < Content-Length: 0
        >
        >     No "Location" header in the response, compared to what a direct 
request
        >     to the backend server sends. I guess this is not the attended 
behaviour.
        >
        >     >
        >     >
        >     > Curl output from Apache HTTP:
        >     >
        >     >> POST /data/request.json?v=1 HTTP/1.1
        >     >> Host: <frontend_app>
        >     >> User-Agent: curl/7.47.1
        >     >> Accept:application/json
        >     >> Content-Type:application/json
        >     >> Authorization:LivePerson appKey=<key>
        >     >> Content-Length: 65
        >     >>
        >     > * upload completely sent off: 65 out of 65 bytes
        >     > < HTTP/1.1 201 Created
        >     > < Date: Tue, 14 Feb 2017 19:15:23 GMT
        >     > < Server: WS
        >     > < Content-Length: 0
        >     > < Content-Type: application/json
        >     > < Location: https://<fronend_app>/api/<data>/<data>/data/<key>
        >     > < P3P: CP="NON BUS INT NAV COM ADM CON CUR IVA IVD OTP PSA PSD 
TEL SAM"
        >     > < Connection: close
        >     >
        >     > Perhaps I need to configure HAProxy differently? I have 
searched the forums and the web, but do not believe I specifically understand 
what is required in order to receive this code from the remote system as I do 
from Apache HTTP.  Is this because HAProxy is configured only to return a 200 
for any successful connection?  Please advise and thank you very much for a 
wonderful product!
        >
        >     No, haproxy will send the same status code as the backend.
        >
        >     >
        >     > Rob
        >     > 970.344.5170
        >     >
        >
        >
        >     --
        >     Cyril Bonté
        >
        >
        
        
        -- 
        Cyril Bonté
        
    
    

Reply via email to