This blog is hosted (together with mintchocolate.org) on a small VPS (1x2.8 Ghz, 256 Мб RAM, 10 Gb SSD). This VPS is shipped with apache2, php and mysql. As you can see I am using wordpress for this blog, also I have approximately 1000 unique visitors per day (half of them visit this and this articles). So it is good to have small response time.
Apache
First I need to measure how slow my blog is. I have used loadimpact.com to do that. This is result for apache2:
Apache2 blog stats
As you can see load time is ~2 seconds and when I have 50 active clients load time is almost 7! seconds!
Next, I have tried an empty static page. This is apache2 with empty static page:
Apache empty page stats
Better! So, now we know ideal response time for apache. No php, no images, only static html (hello world) - ~700 ms
After this, I've decided to move all my sites on this VPS from Apache2 to nginx + php-fpm. 2 seconds is too much! 1 second is the upper limit for load time!
nginx
First of all we need to install nginx with php-fpm:
echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nginx-stable.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
sudo apt-get update
sudo apt-get install nginx php5-fpm
Then change couple settings in /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
And then in /etc/php5/fpm/php.ini
cgi.fix_pathinfo=0
Configure your site:
server {
server_name ivanderevianko.com;
root /var/ivanderevianko.com/www;
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
And now, results for this configuration:
nginx blog stats
As you can see it is twice faster that with apache! And now we can handle 50 active connections without any problem. Incredible!
Conclusion
apt-get remove apache2