Re: [squid-users] anyone knows some info about youtube "range" parameter?

From: Christian Loth <c.loth_at_phase2-networks.com>
Date: Thu, 26 Apr 2012 09:41:45 +0200

Hi,

On Thursday 26 April 2012 03:44:58 Eliezer Croitoru wrote:
> as i already answered a detailed answer to Ghassan.
> i think that caching the chunks if possible is pretty good thing.
> i tried it with nginx but havnt got the option to try it with
> store_url_rewrite.

To maybe save you some work, here's how I did it. First of all, I use nginx as
a cache-peer - so no URL rewriting script. Excerpt of my squid.conf:

acl youtube_videos url_regex -i ^http://[^/]+(\.youtube\.com|\.googlevideo\.com|\.video\.google\.com)/(videoplayback|get_video|videodownload)\?
acl range_request req_header Range .
acl begin_param url_regex -i [?&]begin=
acl id_param url_regex -i [?&]id=
acl itag_param url_regex -i [?&]itag=
acl sver3_param url_regex -i [?&]sver=3
cache_peer 127.0.0.1 parent 8081 0 proxy-only no-query connect-timeout=5 no-digest
cache_peer_access 127.0.0.1 allow youtube_videos id_param itag_param sver3_param !begin_param !range_request
cache_peer_access 127.0.0.1 deny all

Small note: the range request in this configuration that is denied is the
HTTP-Range-Header, not the range URL parameter! Nginx is of course
running on port 8081 on the same server.

The important configuration directive in nginx is as follows:

server {
        listen 127.0.0.1:8081;

        location / {
                root /var/cache/proxy/nginx/files;
                try_files "/id=$arg_id.itag=$arg_itag.range=$arg_range.algo=$arg_algorithm" @proxy_youtube;
        }

        location @proxy_youtube {
                resolver 134.99.128.2;
                proxy_pass http://$host$request_uri;
                proxy_temp_path "/var/cache/proxy/nginx/tmp";
                proxy_ignore_client_abort off;
                proxy_store "/var/cache/proxy/nginx/files/id=$arg_id.itag=$arg_itag.range=$arg_range.algo=$arg_algorithm";
                proxy_set_header X-YouTube-Cache "c.loth_at_phase2-networks.com";
                proxy_set_header Accept "video/*";
                proxy_set_header User-Agent "YouTube Cache (nginx)";
                proxy_set_header Accept-Encoding "";
                proxy_set_header Accept-Language "";
                proxy_set_header Accept-Charset "";
                proxy_set_header Cache-Control "";
        }
}

This way, the setup works. Perhaps anyone of you even has a piece of advice for
improving it? E.g. I'm still looking for a way to log nginx proxy_store hits and
misses...?

Best regards,
- Christian Loth
Received on Thu Apr 26 2012 - 07:41:53 MDT

This archive was generated by hypermail 2.2.0 : Thu Apr 26 2012 - 12:00:04 MDT