Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

After thousands of googles and trying days i cant get the load balancer/failover in squid on windows to work. Iam using squid 2.7. My webservers are 2 single NIC lighttpd and one dual nic lighttpd. server1 in this example is running squid on port 80 and lighttpd on port 8080 (just to test)


  • All 3 webservers running lighttpd should be balanced
  • two option for load balancing:
    1. Best would be if server1 is busy server2 takes over, if server2 is
      busy server3 takes over, etc..
    2. Round robin style evenly distributed load. Eg server1 takes first call, server2 second etc.. All requests should be treated the same way (no url rewriting or so on)
  • Sent host headers have to be redirected to every server as http host header, speaking of "server1", "server1.company.internal" and "".

My approach:

acl all src all
acl manager proto cache_object

http_port 80 accel defaultsite=server1.company.internal vhost

#reverse proxy entries
cache_peer parent 8080 0 no-query originserver round-robin login=PASS name=server1_nic1
cache_peer parent 80 0 no-query originserver round-robin login=PASS name=server2_nic1
cache_peer parent 8080 0 no-query originserver round-robin login=PASS name=server3_nic1
cache_peer parent 8080 0 no-query originserver round-robin login=PASS name=server3_nic2

#decl of names of squid host
acl registered_name_hostdomain dstdomain server1.company.internal
acl registered_name_host dstdomain server1

#ip of squid host
acl registered_name_ip dstdomain 

# access: redirects the correct squid hostname
http_access allow registered_name_hostdomain
http_access allow registered_name_host
http_access allow registered_name_ip
http_access deny all
cache_peer_access server1_nic1 allow registered_name_hostdomain
cache_peer_access server1_nic1 allow registered_name_host 
cache_peer_access server1_nic1 allow registered_name_ip 
cache_peer_access server2_nic1 allow registered_name_hostdomain
cache_peer_access server2_nic1 allow registered_name_host 
cache_peer_access server2_nic1 allow registered_name_ip 
cache_peer_access server3_nic1 allow registered_name_hostdomain
cache_peer_access server3_nic1 allow registered_name_host 
cache_peer_access server3_nic1 allow registered_name_ip 
cache_peer_access server3_nic2 allow registered_name_hostdomain
cache_peer_access server3_nic2 allow registered_name_host 
cache_peer_access server3_nic2 allow registered_name_ip 
cache_peer_access server1_nic1 deny all 
cache_peer_access server2_nic1 deny all 
cache_peer_access server3_nic1 deny all 
cache_peer_access server3_nic2 deny all
never_direct allow all


  1. Load balancer does not load balance other than to first server. Only if the first server is killed in any way the second will take over. I have seen the others working at some point, but definitely not as the intended load balancing described above.
  2. If the cache_peer_access is not defined sometimes the wrong hostname is sent to the backend webserver and this always depends on the defaultsite= parameter. Probably because the host header on the request to squid is not set and its replaced by defaultsite. Leaving out defaultsite didnt solve the problem. The only workaround i found for this is the current approach with cache_peer_access.


  1. Does the cache_peer_access influence the round-robin?
  2. Is there a better workaround to pass the host header to the backed webservers?
  3. Which parameters do increase the speed of load balancing or does anyone have a better approach?


share|improve this question

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.