On Sat, Mar 9, 2019 at 10:45 AM DHAVAL JAISWAL <dhava...@gmail.com> wrote:
> frontend loadbalancer_mycom
> bind 10.100.22.30:80
> mode http
>
> redirect scheme https if !{ ssl_fc }


If this line is the one that makes the redirect (and exposes the
internal IP in case of HTTP/1.0) then you can't fix it as it's part of
HAProxy internal code.

Perhaps you should use:

  redirect location https://mysite.com%[path] if !{ ssl_fc }


Additionally if you don't know beforehand the name of the domain you
could just deny all requests that don't have the `Host` header like so
(put before the `redirect` statement) (this basically breaks
HTTP/1.0):

  acl has_host req.hdr(Host) -m found
  http-request deny if !has_host
  redirect scheme https ...



[I've also included some other hints based on your config.]

> global
> maxconn 20000 # Total Max Connections. This is dependent on ulimit
> [...]
> defaults
> maxconn 25000

The number from `defaults` should be less than the number in `global`
(I think;  double-check the documentation.)



> nbproc 8 # Number of processing cores. Dual Dual-core Opteron is 4 cores for 
> example.

Perhaps you should move to threads instead of processes, especially in
latest versions of HAProxy.



> log /dev/log local1 info
> log /dev/log local1 notice

Isn't the log duplicated?  (You can use only one line.)



> defaults
> timeout connect 1200000
> timeout client 1200000
> timeout server 1200000
> timeout http-request 1200000
> timeout tarpit 1200000


The timeouts are too "permissive" (2 minutes, especially for `client`
and `http-request`) and would easily allow an DoS attack by just
opening the connection and just idling for 2 minutes or slowly writing
the HTTP request for 2 minutes.



> backend my_cluster_mycom]
> [...]
> fullconn 10000
> #server server0320 10.100.3.20:8080 weight 1 maxconn 512 check cookie t0320 
> check port 8080 inter 10s rise 3 fall 3 minconn 500 maxconn 3000 maxqueue 300 
> slowstart 15s
> #server server3320 10.100.33.20:8080 weight 1 maxconn 512 check cookie t3320 
> check port 8080 inter 10s rise 3 fall 3 minconn 500 maxconn 3000 maxqueue 300 
> slowstart 15s


You have two `maxconn` in the server lines.  (Although the servers
seem commented...)



> compression algo gzip
> compression type text/html text/plain text/css image/png image/gif image/jpeg 
> application/x-javascript text/xml application/xml application/xhtml+xml 
> application/x application/javascipt image/jpg


I think it's useless to compress images, especially JPEG (but also
perhaps PNG and GIF).



> timeout client 500000


I think you are really opening yourself to an DoS attack.  :)  (~8
minutes is plenty to just eat your connections...)

If you set such large timeouts, then perhaps you should also try to
limit the number of connections per the same IP / network.  (Use stick
tables for this or `iptables` rules.)


Ciprian.

Reply via email to