Nginx: блокировка URL-адреса содержимого (.MP4 или .PNG) на основе LUA Redis - PullRequest
0 голосов
/ 26 апреля 2020

Я хотел бы заблокировать доступ к определенному контенту (например, видео и изображения), если пользователь не находится в сеансе. И чтобы проверить, аутентифицирован ли он, я использую его на своем бэкенде (через redis): hset users token123 на

Пример запроса URL: ./content/s04-40dm4-de2020.mp4?token=token123

Я хотел бы проверить через модуль lua -resty-redis, если "token123" "включен", если nginx не собирается "блокировать" запрос, будет ли он разрешен нормально. Я не знаю, как сделать это без потери производительности, я сейчас смешиваю модуль redis с этим:

content_by_lua '
    ... (Check in lua-resty-redis equals "on")
     local file = "/ path ..."
     local f = io.open (file, "rb")
     local content = f: read ("* all")
     f: close ()
     ngx.print (content)
';

Есть ли способ блокировать только если вы не прошли аутентификацию и не делаете не сделать это выше? Примечание. Местоположение в nginx: "location ~ * ^. +. (Jpeg | gif | png | jpg | mp4 | ... et c)"

1 Ответ

0 голосов
/ 28 апреля 2020

Используйте NGINX auth_request для обработки проверки токена.

http://nginx.org/en/docs/http/ngx_http_auth_request_module.html#auth_request

location /contents/ {
    auth_request /auth;
    ...
}

location = /auth {

    #Validate your token here. You can use proxy request, njs js_content or lua.

    proxy_pass ...
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}
...