Ubuntu 12.04 LTS. MySQL, and nginx as a reverse proxy with Apache works well for me (plus APC and Memcached). I use the W3 Total Cache plugin on all live sites (can take a while to get used to all its many settings, but once you master it it works really well).
I don't use a security plugin. Where possible I limit the IP addresses that are able to access the wp-login.php URL via .htaccess. If this isn't possible, because of dynamic IP address allocation or multiple login locations, I password protect the wp-login.php URL via .htaccess - it adds an extra login step for clients, but I just explain to them that it's for their benefit (and mine obviously) and send them the URL to an article about the botnet(s) that are constantly on the search for weakened WordPress installs. I also follow the tips given here:
http://codex.wordpress.org/Hardening_WordPress (loads of good advice)
One thing I always do is move a WordPress install's wp-config.php file to an arbitrary directory, a directory out of the web root, somewhere not directly accessible via the web (how to do so is included in the above URL). There's been a lot of discussion about the usefulness of this -
http://wordpress.stackexchange.com/questions/58391/is-moving-wp-config-outside-the-web-root-really-beneficial - but I can't see how it's not a good thing to do. I also include a rule in the document root's .htaccess file preventing access to the 'dummy' wp-config.php file that contains the PHP include command.
Re Contact Form 7, I use it on all my WordPress sites. If you want to prevent it loading its CSS and JS code on every page of your site, add this to your wp-config.php file:
Code:
define('WPCF7_LOAD_JS', false);
define('WPCF7_LOAD_CSS', false);... and this to your WordPress theme's contact page template:
Code:
<?php
if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
wpcf7_enqueue_scripts();
wpcf7_enqueue_styles();
}
?>
... Contact Form 7 will then load its CSS and JS code on the contact page only.