- Lester Chan's Website - https://lesterchan.net -

CDN Serving Dynamic PHP Pages

Mark Jaquith [1]‘s presentation on Confident Commits, Delightful Deploys [2] brought up something which I didn’t thought of, “CDN proxies everything including dynamic php pages”.

In his example, he pointed out cdn.wpengine.com [3] and wpengine.com [4], cdn.page.ly [5] and page.ly [6], cdn.zippykid.com [7] and zippykid.com [8] are all serving the same content with their CDN counterpart.

So out of curiosity, I tested mine, cdn.lesterchan.net and lesterchan.net, and I have the same problem! I did not link it because I have already fixed the problem before writing this blog post.

A common link between us are our CDNs are hosted by NetDNA [9]. So I wrote to them asking is there anywhere I can solve this. They recommended me their EdgeRules [10] add-on which provides a powerful method of controlling how edge servers interact with content and websites visitors.

I gave it a try and it works! What I did was to only allow URI with file extensions to be served by the CDN as shown in the screenshot below:

EdgeRules [11]
EdgeRules

Match Type: Default
Directive: REWRITE RULE ^(.*)$ https://lesterchan.net$1 permanent
Conditional: $uri != RegEx (Case In-Sensitive) \.(png|jpe?g|gif|ico|html|txt|css|js)$
Rule Status: Active
Purge All Files: Yes

EdgeRules Main Page [12]
EdgeRules Main Page

It is a bit “hack-ish” but I guess it will do for now.

A proper way which Mark Jaquith mentioned was to CNAME the CDN to something like static.yourdomain.com and have that subdomain serve only static files.