Hi,

There is no content-length because you're in chunk mode, so this is fine.

Which version of HAProxy are you running?

Could you take a tcpdump between HAProxy and your server?
and send it to me (/Cc Willy).
You might be hitting a bug :/

Baptiste

On Tue, Jan 8, 2013 at 5:45 PM, William Lewis <[email protected]> wrote:
> Hi,
>
> Thanks for the reply.
>
> I'm using 2 different ports because the ports are dynamically assigned on
> startup and the haproxy config rewritten and reloaded.
>
> The web server isn't actually sending a Content-Length header, which it
> probably should be but still shouldn't cause it to break in this fashion.
>
> The request and response headers looks like so.
>
> GET /app/js/libs/jq.mobi.js HTTP/1.1 Host: photorating.mshot.example.com
> Connection: keep-alive User-Agent: Mozilla/5.0(iPad; U; CPU OS 6_0 like Mac
> OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2
> Mobile/8F191 Safari/6533.18.5 Accept: */* Referer:
> http://netproteus.com/test.html Accept-Encoding: gzip,deflate,sdch
> Accept-Language: en-US,en;q=0.8 Accept-Charset:
> ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: ha-server-photorating=wap10-mlan
>
> HTTP/1.1 200 OK Server: xLightweb/2.13.2-B7 Content-Type:
> application/javascript Transfer-Encoding: chunked Last-modified: Mon, 7 Jan
> 2013 12:27:14 +0000 Cache-control: max-age=101461101461 Expires: Wed, 9 Jan
> 2013 20:49:17 +0000 Cache-Control: no-transform Content-Encoding: gzip
> Set-Cookie: ha-server-photorating=host_b; path=/; domain=.example.com
>
>
> I can believe that xlightweb is doing something odd that is contributing to
> this but the fact that
> a) this only ever manifests for 1 specific payload
> b) this never causes a problem when haproxy isn't in the chain
>
> Leads me to believe I'm hitting a race condition in haproxy itself.
>
> Thanks
>
> Will
>
> On Jan 8, 2013, at 4:10 PM, Baptiste <[email protected]> wrote:
>
> Hi,
>
> What is weird is that your Application server does not deliver the
> same object on both servers to a local connection or a remote
> connection...
> Why are you using 2 different ports??
> Could you log the response Content-Length header?
>
> From your log line, it sounds related to a network or server issue...
>
> cheers
>
>
> On Tue, Jan 8, 2013 at 1:38 PM, William Lewis <[email protected]> wrote:
>
> Further to this I've found if I add a large comment at the bottom of the
> file to increase the file size then the problem goes away.
>
> It might be that xlightweb (it's a rather rubbish container but I'm stuck
> with it) is doing something weird for this file, but if I remove the haproxy
> layer and have the ip balancer talk directly to the web servers the problem
> doesn't manifest in a browser.
>
>
> On Jan 8, 2013, at 11:20 AM, William Lewis <[email protected]> wrote:
>
> Hi,
>
> I'm going slightly crazy trying to work out this problem and I hope someone
> can help.
>
> I have 2 hosts, each host is running an instance of haproxy and an instance
> of a java web server xlightweb. Between these hosts and the outside world
> there is a dumb round robin ip balancer that holds no state.
>
> Each of the haproxy are configured to balance between both the localhost
> instance of the web server and the instance on the other host.
>
> (This is a currently a proof of concept system before I deploy haproxy on
> its own machines in front of many more web servers)
>
>
> The problem that I'm having is that serving a particular javascript file is
> failing when the haproxy on host A is fetching it from host B and when the
> haproxy on host B is fetching it from host A.
> It always affects the same javascript file only, and there are many more
> javascript files in use which are being served fine.
>
> Logs from haproxy host A
>
> be/host_a 1/0/1/13/18 200 16389   --NI 1/1/0/0/0 0/0 {Mozilla/5.0(iPad; U;
> CPU OS 6_0 like Mac OS X|} {} "GET /app/js/libs/jq.mobi.js HTTP/1.1"
> be/host_b 4640/0/0/7/4648 200 14955   SDNI 0/0/0/0/0 0/0 {Mozilla/5.0(iPad;
> U; CPU OS 6_0 like Mac OS X|} {} "GET /app/js/libs/jq.mobi.js HTTP/1.1"
>
> Logs from haproxy host B
>
> be/host_a 0/0/1/13/17 200 14956   SDNI 0/0/0/0/0 0/0 {Mozilla/5.0(iPad; U;
> CPU OS 6_0 like Mac OS X|} {} "GET /app/js/libs/jq.mobi.js HTTP/1.1"
> be/host_b 0/0/0/4/5 200 16388   --NI 1/1/0/1/0 0/0 {Mozilla/5.0(iPad; U; CPU
> OS 6_0 like Mac OS X|} {} "GET /app/js/libs/jq.mobi.js HTTP/1.1"
>
>
> My haproxy configuration is this
>
> global
>   daemon
>   quiet
>   maxconn 200000
>   pidfile /local/migwproxy/haproxy.pid
>   uid     60003
>   gid     1001
>   chroot  /local/migwproxy/run
>   log     127.0.0.1       local0
>   log     127.0.0.1       local1 notice
>   log-tag migwproxy
>
> defaults
>   log global
>
>   balance roundrobin
>   mode http
>   monitor-uri /migwproxy
>   http-check send-state
>
>   retries 3
>
>   timeout connect 6000
>   timeout client 1020000
>   timeout server 1020000
>   timeout http-request 6000
>
>   option forwardfor except 127.0.0.1
>   option http-server-close
>   option httplog
>   option log-health-checks
>   option log-separate-errors
>   option redispatch
>   option tcpka
>
> frontend external
>   bind *:9000
>
>   maxconn 200000
>
>   # Capture User-Agent and X-Forward-For headers to the log
>   capture request header User-agent len 45
>   capture request header X-Forwarded-For len 15
>   # Capture any 302 redirects to the log
>   capture response header Location len 20
>
>
>   # We keep track of connection rates and connection numbers
>   stick-table type ip size 200k expire 2m store conn_rate(3s),conn_cur
>   # And we do this per source address
>   tcp-request connection track-sc1 src
>
>   acl source_rate_abuser sc1_conn_rate gt 200
>   acl source_connections_abuser sc1_conn_cur gt 3000
>
>   acl acl_photorating hdr(host) -i photorating.mshot.example.com -i
> photorating.mshoteu.example.com -i photorating.mshotus.example.com -i
> api.photorating.mshot.example.com -i api.photorating.mshoteu.example.com -i
> api.photorating.mshotus.example.com -i push.photorating.mshot.example.com -i
> push.photorating.mshoteu.example.com -i push.photorating.mshotus.example.com
>
>   use_backend be if acl_photorating !source_rate_abuser || acl_photorating
> !source_connections_abuser
>   use_backend be-slow if acl_photorating source_rate_abuser ||
> acl_photorating source_connections_abuser
>
>
> backend be
>
>   cookie ha-server-photorating insert domain .example.com
>
>   server host_a 10.10.184.103:34025 cookie host_a check inter 5000 maxconn
> 500
>   server host_b 10.10.184.11:25117 cookie hosst_b check inter 5000 maxconn
> 500
>
> backend be-slow
>
>   cookie ha-server-photorating insert domain .example.com
>
>   server host_a 10.10.184.103:34025 cookie host_a check inter 5000 maxconn
> 500
>   server host_b 10.10.184.11:25117 cookie hosst_b check inter 5000 maxconn
> 500
>
>
> You can also see a live example here, http://netproteus.com/test.html
>
>
> Any insight, greatly appreciated.
>
>
> Will Lewis
>
>
>
>

Reply via email to