Youtube Caching-Proxy mit Nginx

Ich habe an meinem heimischen Anschluss nur eine DSL Geschwindigkeit von 768 kbit/s, deshalb finde ich es immer sehr nervig wenn ich Videos laden muss. Noch nerviger ist es, wenn ich ein Video nach einem Neustart nochmal laden muss.
Bei meiner Suche nach einer Lösung, bin ich auf dieser Seite gelandet: http://code.google.com/p/youtube-cache/.
Da ich die Lösung mit Squid schon des öfteren in der Vergangenheit probiert hatte, habe ich die Lösung mit Nginx + Squid probiert.
Da Youtube nun nicht mehr die Videos in einem streamed, sondern nur noch in 1,7 MB Blöcken, musste ich die Nginx-Config etwas anpassen.

Nginx-Config:

server {
  listen       8081;

  location / {
    root /usr/local/www/nginx_cache/files;
    try_files "/id=$arg_id.itag=$arg_itag.range=$arg_range" @proxy_youtube;
  }

  location @proxy_youtube {
    resolver 8.8.8.8;

    proxy_pass http://$host$request_uri;
    proxy_temp_path "/usr/local/www/nginx_cache/tmp";
    proxy_store "/usr/local/www/nginx_cache/files/id=$arg_id.itag=$arg_itag.range=$arg_range";

    proxy_set_header X-YouTube-Cache "your.email@here";
    proxy_set_header Accept "video/*";
    proxy_set_header User-Agent "YouTube Cacher (nginx)";
    proxy_set_header Accept-Encoding "";
    proxy_set_header Accept-Language "";
    proxy_set_header Accept-Charset "";
    proxy_set_header Cache-Control "";
    proxy_set_header Content-Length "";
  }
}

Hier eine sofort verwendbare Squid-Config:

http_port 3128

acl all src all
http_access allow all
acl youtube_videos url_regex -i ^http://[^/]+\.youtube\.com/videoplayback\?
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
# Replace 127.0.0.1 with the IP/hostname of the YouTube caching proxy server.
cache_peer 127.0.0.1 parent 8081 0 proxy-only no-query connect-timeout=5
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

Das einzige Problem bei dieser tollen Caching-Config ist, dass die Requests, um die Streaming-Blöcke zu laden, anscheinend vom Nginx gecached werden und es deshalb zu Verzögerungen beim Laden kommt. Erweitert man die Nginx-Config um proxy_buffering off, werden die Streaming-Blöcke wieder schnell geladen, aber dadurch cached Nginx nicht mehr.

Wer eine brauchbare Lösung für dieses Problem findet, lasse mich das bitte wissen.

Getagged mit: , , ,