How to setup an ultra-fast CDN using Nginx and Varnish · Thilanga Pitigala

Thilanga Pitigala     Archive     Feed

How to setup an ultra-fast CDN using Nginx and Varnish

If your website takes more than 3 seconds to load, there is a big chance to loose your site visitors and that is a risk we are dealing with today due to the big competition in the industry.

There are lots of reasons which effects on the site's speed

are few from a lengthy list.

If you are using a good CDNs to serve contents, then that will give a good boost while loading the site. Last month I had to setup up Our own CDN for WSO2 Oxygentank Developer Portal and i'm trying to summaries steps that I followed.

Installing Nginx and varnish

    apt-get install nginx
    apt-get install varnish

Nginx Config

    server {
           open_file_cache_valid 20m;
            listen 81;
            server_name mydomain.com;
            access_log   /var/log/cdn/mydomain.com/logs/access.log;
            root   /cdn_document_path/;

            location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$ {
                            open_file_cache_valid 120m;
                            expires 7d;
                            open_file_cache max=1000 inactive=20s
            }

             location = /50x.html {
                            root   /var/www/nginx-default;
            }

            # No access to .htaccess files.
            location ~ /\.ht {
                deny  all;
            }
    }

Varnish Config

    START=yes
    NFILES=131072
    MEMLOCK=82000
    INSTANCE=$(uname -n)
    DAEMON_OPTS="-a :80 \
                 -T localhost:6082 \
                 -f /etc/varnish/default.vcl \
                 -S /etc/varnish/secret \
                 -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"
    backend default {
        .host = "127.0.0.1";
        .port = "81";
    }

    sub vcl_recv {
     if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
      return (lookup);
     }
    }

    sub vcl_fetch {
     if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
      unset obj.http.set-cookie;
     }
    }

Start Nginx and Varnish

    /etc/init.d/nginx start
    /etc/init.d/varnish restart

Once you start Nginx and Varnish. Varnish will start to server port 80 web traffic. If it is a static content varnish will server and Nginx will look after all dynamic contents.

cdn nginx varnish
comments powered by Disqus