Some words about squid (in poor english...):
A PHP-cache caches php-outputs, but only identical php-outputs. The hitrate of php-caches with moodle should not be to high because any site is delivered individually for each user. You will experience a great performance boost with sites with many simultaneous users using a PHP cache anyway, because of the simple mass of requests. If only 20% could taken from cache you'll save much resources.
Squid can be configured to run in reverse-proxy mode. Squid caches an kind of content (e.g. pictures, soundfiles etc.). Your webserver then works not web-accessible e.g. on port 81. Squid delivers the content on port 80 asking your webserver only when objects are not in his cache. Same PHP-outputs should be taken from squid cache, too, but squid can cache a bigger variety if data.
I found no big difference between reverse-proxy or a php-cache.
I have got a small machine. We are running 60 Clients simultaneously with a Duron 1200 and 512Megs of RAM. Performance is even fine with the test module.
I am currently using lighttpd as webserver and PHP runs in fastCGI mode with individual user permissions for each moodle installation. If I run in trouble some day, I would try out a additional reverse proxy before moving to another machine.
lighttpd is worth a look for many reasons. My PHP-threads could even run on another machine and loadbalancing is integrated. So my installation is able to scale very well. lighttpd consumes not much RAM either.