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é

