Back to article
The Powerful, Peerable Squid Caching Proxy: A Flexible Open Source Performer
Clear up 'net congestion, speed up popular pages, and save bandwidth.
March 11, 2002
Squid is a highly flexible, widely used Internet proxy caching server for Linux and other Unix platforms. As a proxy server, Squid can distribute an Internet connection to other computers within the network, connected either over an intranet or dial-up, DSL, ISDN, or cable lines, for example. Squid also caches HTTP and FTP URLs, gopher objects, and DNS look-ups, for lower latency and faster performance.
Squid is generally regarded as more difficult to configure and maintain than many of its commercial counterparts. Still, Squid is very popular among users ranging from small businesses to large ISPs. Although available at no cost off the Web, Squid offers a wide range of advanced features.
"The user experience is enhanced with Squid, because some pages are delivered more quickly. Also, to a certain extent our bandwidth is reduced," says Alex Vas, CEO of Vasnet Communications, an ISP in India. Vasnet is supporting 5,000 dial-up users on Squid and other no-cost Linux software, operating on IBM Netfinity servers.
"It's very easy to rapidly and cheaply get a PC+Linux+Squid up-and-running at any point where you find http traffic congestion. It also scales up! Only the largest money-is-no-object caches seem to be running anything else," says Donovan Barda of Minkirri, an Australian ISP that runs Debian Linux.
When deployed for peer-to-peer caching, Squid allows multiple caches to be configured in hierarchical relationships, through the use of ICP (Internet cache protocol). Peer-to-peer caching can come into play either for distributing load, or for sharing proxy hits among multiple service providers.
At Minkirri, Baarda is currently using peer-to-peer caching for load-balancing multiple links to different upstream proxies.
Squid can also generate and exchange cache digests, which index objects stored in the cache for sharing among multiple peers.
Caching can be tuned along more than 100 different criteria. To spread response handling across multiple interfaces, for instance, users can modify outgoing ports. For more rapid performance, users can enable and configure memory pools.
Other major features of Squid include transparent caching, and the ability to be used as a simultaneous forward and reverse Web proxy. As a reverse Web proxy, Squid acts as a "stand-in" for the content server.
In transparent caching, Web requests are intercepted by the proxy server transparently. Client software thinks it is talking to the originating server, when it is actually talking to the proxy server. Transparent caching requires routing or redirecting Squid through the use of either a switch or (starting with Squid 2.3) a Cisco router running WCCP 1.0.
Squid requires plenty of RAM and disk space. For a 1 to 1.5 Mbps Internet connection, the recommended configuration calls for an 800MHz processor, 256 megabytes of RAM, a 30 GB 7200 RPM disk, and a NIC (network interface card).
Unlike commercial products, Squid can't be configured through either a GUI or a command line interface. Instead, the user must edit either the etc/squid.conf or mime.conf file. Squid also doesn't support SNMP e-mail or pager notification, a standard feature in commercial products.
Squid can be monitored, though, through the use of either its own Cache Manager, an SNMP NMS, or local processors. Through Cache Manager, users can look up HTTP request rates, service times, and traffic rates, for instance. NMSes can query the Squid MIB for software version, memory, disk space, and a number of other criteria.
Many tools are already available for expanding upon Squid's basic features. Squid2MySQL is an accounting system for Squid. Another tool, authored by Baarda, is pyredir, is a redirector for Squid implemented in Python.
Through open source development, other new capabilities are also on the way. Current projects include a new storage interface, satellite link enhancements, and a Windows ports of Squid, for instance.