Http_secure_link

Всех приветствую!
Помогите разобраться с модулем http_secure_link - на стороне Angie сервера я все настроил - подскажите как настроить на ответной стороне - если секурим, например, HLS ссылку - как выставить ее на сайте?

location ~* \/md5\/.*\.m3u8 {
        secure_link $arg_md5,$arg_expires;
        secure_link_md5 "$secure_link_expires$uri$remote_addr salt";

        if ($secure_link = "") {
            return 403;
        }

        set $location /md5/;
        set $target_location /md5_insider;
        set $secret salt;
        set $debug false;
        js_content md5.process;
    }

    location /md5_insider {
        internal;
        subrequest_output_buffer_size 10M;
        rewrite /md5_insider/(.*) /dir-server/$1 break;
        proxy_pass http://site;
    }

    location ~* \.ts {
        secure_link $arg_md5,$arg_expires;
        secure_link_md5 "$secure_link_expires$uri$remote_addr salt";

        if ($secure_link = "") {
            return 403;
        }

        add_header Content-Type video/mp2t;
        proxy_hide_header Content-Type;
        rewrite /md5/(.*) /dir-server/$1 break;
        proxy_pass http://site;
    }

Это часть конфига Angie

Еще есть скрипт который проверяет и генерит md5

var crypto = require('crypto')

function getHash(expires, path, ip, secret) {
        var token = `${expires}${path}${ip} ${secret}`
        var md5 = crypto.createHash('md5').update(token).digest("base64").replace(/=/g, '').replace(/\+/g, '-').replace(/\//g,'_')
        return md5
}

function process(r) {
        var location = r.variables.location || ''
        var targetLocation = r.variables.target_location || '/'
        var secret = r.variables.secret || ''
        var debug = r.variables.debug || false

        var originURI = r.uri.replace(location, '/')
        var targetURI = `${targetLocation}${originURI}`
        var pathURI = r.uri.replace(/(.*\/)[^\/]+$/,'$1')
        var realIP = r.headersIn['x-real-ip'] || r.remoteAddress

        // debug info
        if (debug) {
                r.error(`targetLocation: ${targetLocation}`)
                r.error(`originURI: ${originURI}`)
                r.error(`targetURI: ${targetURI}`)
                r.error(`pathURI: ${pathURI}`)
                r.error(`realIP: ${realIP}`)
                r.error(JSON.stringify(r.variables.args))
                r.error(JSON.stringify(r.args))
        }

        // Без expires или md5 отдаём 403 код
        if (!r.args.expires || !r.args.md5) {
                r.return(403)
        } else {
                // Делаем запрос контента
                r.subrequest(targetURI, r.variables.args)
                .then((res)=>{
                        // Обрабатываем только файлы m3u8
                        if(r.uri.match(/\.m3u8$/) && 200 <= res.status && res.status < 300){
                                // Разбираем файл и подставляем md5
                                var editedM3U8 = res.responseText.split("\n")
                                        .map(line => {
                                                if(line[0]==='#' || !/^(.*\.(?:ts|m3u8))$/.test(line)){
                                                        return line
                                                }else{
                                                        var hash = getHash(r.args.expires, `${pathURI}${line}`, realIP, secret)
                                                        return `${line}?md5=${hash}&expires=${r.args.expires}`
                                                }
                                        })
                                        .join("\n")

                                r.return(200, editedM3U8)
                        }else{
                                r.return(res.status, res.responseBody)
                        }
                })
                .catch((error) => {
                        r.error(error.message)
                        r.return(500)
                })
        }

        return
}

export default {process};

Так вот он генерит ссылку по принципу

echo -n '1720572281/md5/index.m3u85.142.43.42 salt' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

Добрый день.

Если, например, при отдаче сайта клиенту заменять на лету ссылку на сгенерированную при помощи директивы sub_filter?

Оно не подойдет, надо, чтобы у каждого клиента были разные ссылки - как раз это делает скрипт JS

Очевидно, раз в hash используется client IP. Именно поэтому предложение было таким. Результат работы скрипта доступен Angie и, соответственно, его можно в переменной отдать директиве sub_filter.