Squid is a well-known open source http proxy server.
Sometimes it is necessary to change its configuration, for example to update ACL lists. Fortunately it has the command "squid -k reconfigure". Unfortunately, during reconfiguration squid refuses new connections. If the configuration is complex and ACLs are large it can take several seconds.
Some people recommend setting up multiple squid servers with a load balancer to solve the problem, but I believe it's an overkill for small installations.
So here is my approach.
To avoid service disruption, start another copy of squid on the same machine with identical configuration but with different TCP ports and without persistent storage:
Reconfigure the first copy of squid using "squid -k reconf", then remove NAT redirection and shutdown the second copy of squid using "squid -f $b_conf -k shutdown".
Sometimes it is necessary to change its configuration, for example to update ACL lists. Fortunately it has the command "squid -k reconfigure". Unfortunately, during reconfiguration squid refuses new connections. If the configuration is complex and ACLs are large it can take several seconds.
Some people recommend setting up multiple squid servers with a load balancer to solve the problem, but I believe it's an overkill for small installations.
So here is my approach.
To avoid service disruption, start another copy of squid on the same machine with identical configuration but with different TCP ports and without persistent storage:
a_conf=/etc/squid/squid.confThen redirect new connections to the new port (i.e. 13128 by default) using iptables NAT.
b_conf=/etc/squid/squid-b.conf
b_pid=/var/run/squid-b.pid
sed -e 's/^http_port \([0-9]\+\)/http_port 1\1/' \
-e '/^cache_dir/d' < $a_conf > $b_conf
echo "pid_filename $b_pid" >> $b_conf
squid -f $b_conf
Reconfigure the first copy of squid using "squid -k reconf", then remove NAT redirection and shutdown the second copy of squid using "squid -f $b_conf -k shutdown".