up vote 2 down vote favorite
share [g+] share [fb]

I used rewrite directives below in nginx to rewrite urls of static files to external CDN server.

rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ http://cdn.domain.com/$1_$2 last;

It works but it redirect the url automatically in browsers.

How can I do the above rewrite without redirects?

link|improve this question

feedback

3 Answers

up vote 1 down vote accepted

You need to change the links inside your application to point to the CDN for static includes.

When you rewrite to an http location there's nothing nginx can do but redirect the browser (since the CDN is outside of nginx, and the browser needs to get the files from the CDN). You would have the same issue with Apache or any other URL rewriter, as the CDN is not an "internal" location to the web server.

One option might be the nginx subsitution module, which can replace content as it is delivered. But that doesn't handle regular expressions, and would slow down every request. It is better just to change your application's HTML to reference the CDN URLs directly.

link|improve this answer
feedback

If you want to hide URL of external CDN server you must find CDN with aliases support. Then point your subdomain (cdn.yourdomain.com) to CDN.

link|improve this answer
feedback

nginx is case sensitive (feature or bug), use HTTP:// instead of http:// for example:

rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ HTTP://cdn.domain.com/$1_$2 last;

but request will be send to proxy_pass server, and it only works if server in proxy_pass is also web-proxy server, who understands

GET HTTP://cdn.domain.com/ HTTP/1.0
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.