We can do CDN integration in many ways. Internap Has an Apache2 Module for CDN-ifying a Website. It is buggy, that is the problem. Here is How To Rewrite CDN URL Rather CDN Integration With Apache mod_cdn Module. This method works with only certain CDNs, others may need modification of code. Our guide is for KeyCDN which we talked about in earlier post (it is possibly better to read if you are not a KeyCDN user) which will not need modification of code. Other supported CDNs are Akamai, Internap, MetaCDN, VoxCAST etc. It is not possible for us to test all the CDNs.
Requirements and Official Sources For CDN Integration With Apache mod_cdn
Obviously, the server should be running Apache2 web server. Server Operating System can be any GNU/Linux (CentOS, Ubuntu etc). Here are the official sources of Apache mod_cdn :
1 2 3 | https://github.com/internaplabs/mod_cdn http://agile.internap.com/mod-cdn https://www.keycdn.com/support/apache-cdn/ |
For some unknown reason, we have not found much documentations on Apache mod_cdn.
---
CDN Integration With Apache mod_cdn : Steps
We are describing for Ubuntu/Debian. CentOS is written at bottom.
1 2 3 4 5 6 | sudo apt-get install libxml2-dev libapr1-dev apache2-dev libssl-dev // Download from Github if does not work wget http://agile.internap.com/assets/mod_cdn-1.1.0.tar.gz tar zxvf mod_cdn-1.1.0.tar.gz cd mod_cdn-1.1.0/ ls |
You’ll get this list of files :
1 2 | COPYING Makefile cdn.conf example.conf ChangeLog README cdn.load mod_cdn.c |
There is no mod_cdn.so
. First we will build it, move it to modules directory :
1 2 | make sudo cp mod_cdn.so /usr/lib/apache2/modules/ |
We need to edit the cdn.load
:
1 | nano cdn.load |
to add one extra line :
1 2 3 | LoadFile /usr/lib/libxml2.so.2 LoadFile /usr/lib/x86_64-linux-gnu/libssl.so LoadModule cdn_module /usr/lib/apache2/modules/mod_cdn.so |
We gave example with /usr/lib/x86_64-linux-gnu/libssl.so
. It can be libssl.so.10
or something other and need to loaded instead.
1 2 3 4 5 6 | cd /etc/apache2/mods-enabled sudo cp cdn.load /etc/apache2/mods-available/ sudo cp cdn.conf /etc/apache2/mods-available/ sudo ln -s ../mods-available/cdn.conf cdn.conf sudo ln -s ../mods-available/cdn.load cdn.load service apache2 restart |
For CentOS system the layout of the Apache configuration just different. Copy lines from cdn.load
and paste in /etc/httpd/conf/httpd.conf
, cdn.conf
in /etc/httpd/conf.d
, and mod_cdn.so
in /usr/lib/httpd/modules
.
Now, if site configuration file is at /etc/apache2/sites-available/default
, then open it :
1 | nano /etc/apache2/sites-available/default |
Directives will be like this :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <IfModule mod_cdn.c> CDNHTMLDocType XHTML CDNHTMLToServer https://cdn.example.com CDNHTMLFromServers https://example.com CDNHTMLRemapURLServer \.png$ i CDNHTMLRemapURLServer \.jpg$ i CDNHTMLRemapURLServer \.gif$ i CDNHTMLRemapURLServer \.css$ i CDNHTMLRemapURLServer \.js$ i CDNHTMLLinks img src CDNHTMLLinks link href CDNHTMLLinks object data CDNHTMLLinks input src CDNHTMLLinks script src CDNHTMLLinks a href </IfModule> |