Caching Objects, Passing Through and Rewrites
jwilson
nginx-forum at nginx.us
Fri Feb 1 17:33:46 UTC 2013
I'm trying to set up nginx to reverse proxy for our CDN to prevent
unauthorized access to raw video feeds. The idea is to restrict it to a set
user-agent and referer, and if doesn't match, to instead call the page for
that video.
I would also like it to cache said video objects as well as any other
cachable objects, and to just pass other URLs through to origin.
Here's my config so far:
upstream mainsite {
server www.example.com;
}
upstream cdn {
server example.cdnprovider.com;
}
server {
listen *:80;
# cachable objects, no restrictions
location ~ (^/img|^/css|^/js|^/video/thumbnail|^/user/avatar) {
proxy_pass http://cdn$request_uri;
proxy_set_header Host "content.example.com";
}
# raw video requests
location ~ ^/video/raw {
rewrite_log on;
valid_referers *.example.com example.com;
# get the video id from the end of the string
if ($uri ~* ^/video/raw/(.*)$) {
set $vidid $1;
}
# The app is automatically passed
if ($http_user_agent ~* Example-App) {
proxy_pass http://cdn$request_uri;
}
# redirect requests for raw video to page for that video
if ($invalid_referer) {
rewrite ^(.*)$ /!$vidid break; # example.com/!vidid
}
proxy_pass http://mainsite$request_uri;
proxy_set_header Host "www.example.com";
}
# everything else goes to origin, no caching
location / {
proxy_pass http://mainsite$request_uri;
proxy_set_header Host "www.example.com";
}
}
The issue is that even without providing the correct user-agent or referer,
I still get the raw video returned. Any help appreciated!
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,235825,235825#msg-235825
More information about the nginx
mailing list