nginx .conf,仅当查询参数中存在特定单词时才下载 mp4 文件

nginx .conf,仅当查询参数中存在特定单词时才下载 mp4 文件

我有这个代码:

map $arg_dl $mimetype {
            1       application/octet-stream;
            default video/mp4;
    }

    server {
            listen          80;
            server_name     example.com www.example.com;
            root            /usr/share/nginx/html;
            index           index.html;

            location ~ \.mp4$ {
                    types {
                            $mimetype mp4;
                    }
                    default_type $mimetype;
            }

            error_page 404 /404.html;

问题是,如果我在视频链接中插入 .mp4? dl = 1,我可以正确下载视频,但如果我使用 url .mp4 或 .mp4? dl = gfgfgf 打开视频链接,浏览器无论如何都会下载视频。我该如何解决?只有当查询中有一个并且有其他参数才能以流式传输方式观看视频时,我才需要下载视频。我该怎么办?谢谢

答案1

显然,您无法在块内或使用映射变量设置types和。一种解决方案是在标记中使用特殊 URI 来处理您需要的特定 MIME 类型。default_typeiflocationinternal

server {
    ...
    root /usr/share/nginx/html;

    location ~ \.mp4$ {
        if ($arg_dl) { rewrite ^ /download$uri last; }
        ...
    }
    location ^~ /download/ {
        internal;
        alias /usr/share/nginx/html/;
        types {}
        default_type application/octet-stream;
        expires -1;
    }
    ...
}

修饰符^~可避免与其他正则表达式位置产生歧义。 可防止internal/download直接访问。locationalias应都以 结尾,/或都不以 结尾/

相关内容