Advertisement
pakdoz

Nginx.rb Youtube Caching

Aug 29th, 2013
5,828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.07 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. # This script is not written by me,
  3. # My Email address is inserted Just for tracking purposes
  4. # For more info, visit http://code.google.com/p/youtube-cache/
  5. # url_rewrite_program <path>/nginx.rb
  6. # url_rewrite_host_header off
  7.  
  8. require "syslog"
  9. require "base64"
  10.  
  11. class SquidRequest
  12. attr_accessor :url, :user
  13. attr_reader :client_ip, :method
  14.  
  15. def method=(s)
  16. @method = s.downcase
  17. end
  18.  
  19. def client_ip=(s)
  20. @client_ip = s.split('/').first
  21. end
  22. end
  23.  
  24. def read_requests
  25. # URL <SP> client_ip "/" fqdn <SP> user <SP> method [<SP> kvpairs]<NL>
  26. STDIN.each_line do |ln|
  27. r = SquidRequest.new
  28. r.url, r.client_ip, r.user, r.method, *dummy = ln.rstrip.split(' ')
  29. (STDOUT << "#{yield r}\n").flush
  30. end
  31. end
  32.  
  33. def log(msg)
  34. Syslog.log(Syslog::LOG_ERR, "%s", msg)
  35. end
  36.  
  37. def main
  38. Syslog.open('nginx.rb', Syslog::LOG_PID)
  39. log("Started")
  40.  
  41. read_requests do |r|
  42. if r.method == 'get' && r.url !~ /[?&]begin=/ && r.url =~ %r{\Ahttp://[^/]+\.youtube\.com/(videoplayback\?.*)\z}
  43. log("YouTube Video [#{r.url}].")
  44. "http://127.0.0.1:8081/#{$1}"
  45. else
  46. r.url
  47. end
  48. end
  49. end
  50. main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement