Missing: caching. Caching. Caching. And more caching.
I speak of Wordpress and database-backed PHP applications of its ilk. Wordpress loves to spray MySQL in a thick stew of queries for every single page load.
Without sensible -- preferably aggressive -- caching, your Wordpress site will die in the arse.
My setup generates cached .gz files, which nginx can serve directly. It flies. It didn't used to.
Or if you dont want to deal with Wordpress to implement the caching, use Varnish. (also mentioned few times in this thread)
I've used Varnish for some high-traffic Wordpress sites by sitting it in front of Apache running Wordpress. With well planned TTLs, and logged-in cookie detection, most of the inconveniences of caching can be eliminated.
Also, using Disqus or similar services for comments will be helpful. You wont have to worry about comments not showing up until the cache clears, leading to confused users. That is, if you use the javascript implementation of these comment services.
Alternatively, plugins like WP Super Cache have automatic post cache flushing if there are updates, and you can also tell it to bypass cache for logged in users. But it is IO-bound.
WP Super Cache will serve up cached files via PHP with the flip of a switch. While this isn't as fast as letting the server serve up cached files, it's an easy win.
I speak of Wordpress and database-backed PHP applications of its ilk. Wordpress loves to spray MySQL in a thick stew of queries for every single page load.
Without sensible -- preferably aggressive -- caching, your Wordpress site will die in the arse.
My setup generates cached .gz files, which nginx can serve directly. It flies. It didn't used to.