I've seen people recommend combining all of these in a flow, but they seem to have lots of overlapping features so I'd like to dig in to why you might want to pass through 3 different programs before hitting your actual web server.
nginx - ssl: yes - compress: yes - cache: yes - backend pool: yes
varnish - ssl: no (stunnel?) - compress: ? - cache: yes (primary feature) - backend pool: yes
haproxy: - ssl: no (stunnel) - compress: ? - cache: no - backend pool: yes (primary feature)
Is the intent of chaining all of these in front of your main web servers just to gain some of their primary feature benefits?
It seems quite fragile to have so many daemons stream together doing similar things.
What is your deployment and ordering preference and why?