nginx HttpSecureLinkModule php streaming

JoakimR nginx-forum at forum.nginx.org
Sat Mar 26 02:01:28 UTC 2016


I have for hours been trying to understand and figure out how this is
working, and searched and tried a lot, but still.... No hair left on my head
:(

Sources for trial and errors
http://nginx.org/en/docs/http/ngx_http_secure_link_module.html#variables
http://stackoverflow.com/questions/8848919/secure-pseudo-streaming-flv-files/8863219#8863219
http://stackoverflow.com/questions/27468743/nginx-secure-link-module-not-working-with-php-files-but-working-on-static-files
http://stackoverflow.com/questions/30065870/nginx-httpsecurelinkmodule-php-example

The question is how do I get Nginx and php to make a timed encrypted link to
play a video?

The final output should be looking like

   
http://domain.tld/videos/529d86c4ff560cb559df7eb794aeb4b1/56f5bec4/5/4/d/f/e/54dfee5c43e6e.mp4

real path for this video is

    /var/www/domain.tld/media/videos/5/4/d/f/e/54dfee5c43e6e.mp4

The php snippet that should be left unaltered if possible, since it will be
updated from time to time from the developer. So all modifications have to
made in NginX

    //generate lighttpd hash
    function getMediaLink($filename) {
      global $modsec_secret; // example: s3cr3tk3y (from your lighttpd
config)
      global $modsec_url; // example: http://media.asfd.com/dl/ with
trailing slash
      $filename = rawurldecode($filename);
      $f = "/".$filename;
      $t = time();
      $t_hex = sprintf("%08x", $t);
      $m = md5($modsec_secret.$f.$t_hex);
      $link = $modsec_url.$m.'/'.$t_hex.$f;
      return $link;
    }

And to the NginX conf file i have this head:

        server {
            listen       80; # http2;
            server_name  localhost;
            	index  index.php index.html index.htm;
        
            #charset koi8-r;
            access_log  /var/log/nginx/access.log  main;
            root   /var/www/domain.tld;
        
            location / {
    
    ..... (the latest attempt)
    
    location /videos/ {
    	secure_link $arg_st,$arg_e;
    	secure_link_md5 secretstring$uri$arg_e;
    	
   	location ~ \.mp4$ {
    		
    		if ($secure_link = "") {
    			return 403;
    			}
    			
	    	mp4;
				mp4_buffer_size       1m;
				mp4_max_buffer_size   5m;
				gzip off;

    	}
    
    location ~ \.flv$ {
    	
    	if ($secure_link = "") {
    		return 403;
    		}
    		
    	flv;
    	}
    }

Could some one please try to tell me how to make this happen, but maybe more
important why, in a passion that mae me understand how and why?

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,265663,265663#msg-265663



More information about the nginx mailing list