What is varnish cache ?
Varnish (HTTP accelerator) is an open source reverse HTTP proxy that will work on front of apache & nginx to speeds up your website/webserver performance. Especially this was designed for content-heavy dynamic web sites such as facebook, twitter, etc.. I can dam sure varnish cache will improve your webserver performance 500% or 1000% compare with earlier stage. How it will work ? Varnish speeds up your website and reduce the web server load by storing a copy of the web page served by the web server. If any new request coming, varnish will check the cached pages, if it’s in cache then it will serve the web page directly without sending request to web server.
What is new in varnish cache 4.x & advantage of varnish cache
- Improved security features (jails)
- Support for PROXY protocol
- Warm and cold VCL states.
- Backends defined through VMODs.
- default.vcl file is not configured, so go through the Varnish cache 4.x documentation for further details
- Improve web server performance by serving the request from cache
- support load balancing (round robin and a random director)
- Plugin support available
- Gzip Compression and Decompression
1) Install dependencies for varnish cache
Install dependencies for varnish cache to avoid dependencies issue.
# Install dependencies for varnish cache # [root@2daygeek]# yum install autoconf automake jemalloc-devel libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx graphviz
For more details @ varnish dependencies
2) Checking available version of varnish cache
Checking available version of varnish cache because i’m going to install latest version of varnish (4.x).
# varnish cache available version checking (It shows older version) # [root@2daygeek]# yum list varnish Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.mirror.rafal.ca * epel: dl.fedoraproject.org * extras: centos.mirror.rafal.ca * updates: centos.mirror.rafal.ca Available Packages varnish.x86_64 2.1.5-5.el6 epel # Adding latest version of varnish to repo # [root@2daygeek]# rpm -i https://repo.varnish-cache.org/redhat/varnish-4.1.el6.rpm # Again checking varnish cache version # [root@2daygeek]# yum list varnish Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.mirror.rafal.ca * epel: dl.fedoraproject.org * extras: centos.mirror.rafal.ca * updates: centos.mirror.rafal.ca varnish-4.1 | 951 B 00:00 varnish-4.1/primary | 3.5 kB 00:00 varnish4.1 8/8 Available Packages varnish.x86_64 4.1.0-1.el6 varnish-4.1
3) Installing varnish cache
Now, i got latest version of varnish cache and going to install it.
[root@2daygeek]# yum install varnish
4) Configure varnish cache
In earlier version of varnish, we need to make alot of changes but in 4.x not like that. You can make it work by doing small modification.
# Start varnish cache service # [root@2daygeek]# /etc/init.d/varnish start or [root@2daygeek]# service varnish start # Checking varnish cache default listening port # [root@2daygeek]# netstat -tanp|grep varnish # Change varnish default listening port to 80 (By default varnish runs in port no. 6021 and we need to change the port no. 80. So, that varnish will cache web application and run in port no. 80) # [root@2daygeek]# nano /etc/sysconfig/varnish VARNISH_LISTEN_PORT=80 # Checking beckend default configuration from default.vcl file (This was build with properly. So, change the apache listening port to 8080 because varnish already listening port no. 80 and apache will work on backend and varnish will work on front of apache) # [root@2daygeek]# nano /etc/varnish/default.vcl backend default { .host = "127.0.0.1"; .port = "8080"; } # Modifying apache default listening port to 8080 which was build with dafualt.vcl file # [root@2daygeek]# nano /etc/httpd/conf/httpd.conf Listen *:8080 # Change all VirtualHost file also # [root@2daygeek]# nano /etc/httpd/conf/httpd.conf ServerName magesh.co.in ServerAdmin [email protected] DocumentRoot /var/www/html/ ErrorLog logs/magesh_co_in_error.log CustomLog logs/magesh_co_in_access.log common # Restart varnish cache service # [root@2daygeek]# /etc/init.d/varnish restart or [root@2daygeek]# service varnish restart # Restart apache service # [root@2daygeek]# /etc/init.d/httpd restart or [root@2daygeek]# service httpd restart
5) Testing Varnish cache
I’m going to check on my server whether varnish cache is working fine or not.
[root@2daygeek]# curl -I http://localhost HTTP/1.1 200 OK Date: Fri, 02 Oct 2015 15:28:30 GMT Server: Apache/2.2.15 (CentOS) Accept-Ranges: bytes X-Mod-Pagespeed: 1.9.32.4-7251 Vary: Accept-Encoding Cache-Control: max-age=0, no-cache Content-Length: 49 Content-Type: text/html; charset=UTF-8 X-Varnish: 6 Age: 0 Via: 1.1 varnish-v4 Accept-Ranges: bytes Connection: keep-alive
6) Enable Varnish cache logs
By default varnish wont write logs and we need to start the varnish log daemon.
# Start varnishlog service # [root@2daygeek]# /etc/init.d/varnishlog start # Start varnishncsa service # [root@2daygeek]# /etc/init.d/varnishncsa start
WOW…! Varnish cache working amazing, now i’m getting 500x to 1000x speed compare with earlier stage.