@wlanboy,
You should add Varnish in front of that, you can pretty much use the out of the box vcl with varnish. The only thing you may need to research is if you want to have the actual client ip show in your logs, then you will need mod_rpaf for Apache and you will need to use the code to pass the X-Forwarder-For header.
Though, looking at your memory usage, you may want a small bit more ram or to run the varnish as a proxy on a secondary server. You may be able to cut a small bit of memory usage out of MySQL with tuning to fit Varnish in also. With WordPress sites even with a lot of plugins your talking a 2-3 second or more load time cut and it will cut some of the usage on Apache off by caching things in the proxy. Will mean less MySQL requests also.
Edit: I prefer to cache in memory if it is spare, however, you may be able to use drive cache instead and not need as much ram. Either way, check it out and let me know if it speeds up your site
Decided to add a few quick pointers to make your install a little bit easier:
To install on .deb based system:
# apt-get install varnish
# varnishd -V
varnishd (varnish-2.1.3 SVN )
Copyright (c) 2006-2009 Linpro AS / Verdens Gang AS
(check your version and make sure any documentation you check on the net is for the right version. Debian 6 had version 2.1.x not sure what Debian 7 comes with in its repos.)
Want to see client ips in Apache logs?
Apache mod_rpaf:
Get mod_rpaf for Apache:
http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
This article give the general idea of how to get it installed:
http://www.bxtra.net/articles/2011-02-13/how-to-install-modrpaf-for-apache-22
Varnish V3:
This is the VCL which needs added to version 3.x (note this goes under the "sub vcl_recv {"):
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
Varnish V2:
In Varnish V2.x is it a little easier (like above, under "sub vcl_recv {"):
set req.http.X-Forwarded-For = req.http.rlnclientipaddr;
All Versions:
Remember to exclude your admin paths, install folders, etc using the following code example (this would also be under "sub vcl_recv {"):
# Do not cache these paths.
if (req.url ~ "^/server-status$" ||
# (Below) This will take folder forums and everything under it and not cache it
req.url ~ "^/forums" ||
# This will not cache anything on the page install.php
req.url ~ "install.php" ||
req.url ~ "upgrade.php" ||
req.url ~ "sitemap.xml.gz" ||
req.url ~ "sitemap.xml") {
# This tells varnish not to cache these items, but instead to pass you through to the backend
return (pass);
}
}
Hope this helps out!
Cheers!