Nginx mp4 热链接保护不起作用

Nginx mp4 热链接保护不起作用

我尝试保护 mp4 文件的热链接,但对我来说不起作用。

这是我正在使用的代码:

  location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css)$ {
  valid_referers none blocked http://188.226.192.56;
  if ($invalid_referer) {
    return 403;
  }

  root   /usr/share/nginx/html;
  expires 1d;
}

适用于 .jpg、.png 等,但不适用于 mp4。我做错了什么?

这是我的 nginx 配置:

server {
listen       80;
server_name  ipaddress;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index index.php index.html index.htm;
}

error_page  404              /404.html;
location = /404.html {
    root   /usr/share/nginx/html;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}
location /usr/share/nginx/html/video/ {
    # activate flv/mp4 parsing for pseudostreaming
    flv;
    mp4;
    mp4_buffer_size     4M;
    mp4_max_buffer_size 10M;
}    
    location ~ .mp4$ {
    gzip off;
    gzip_static off;
    mp4;
    limit_rate_after 10m;
    limit_rate 1m;
}   
client_max_body_size    80m;

location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css)$ {
  valid_referers none blocked http://188.226.192.56;
  if ($invalid_referer) {
    return 403;
  }

  root   /usr/share/nginx/html;
  expires 1d;
}  

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}

}

谢谢你!

答案1

原因是location ~ .mp4$您的配置中有一个单独的块,nginx 在发送文件时会使用它。因此,您用于location防止热链接的其他块不适用。

修复此问题的最简单方法是将热链接预防功能纳入 MP4 位置块,如下所示:

location ~ \.mp4$ {
    valid_referers none blocked http://188.226.192.56;
    if ($invalid_referer) {
        return 403;
    }
    gzip off;
    gzip_static off;
    mp4;
    limit_rate_after 10m;
    limit_rate 1m;
}

此外,您的location /usr/share/nginx/html/video/指令很可能毫无用处。除非使用类似 URL 访问您的视频http://example.com/usr/share/nginx/html/video/videofile.mp4,否则永远不会使用该指令。您应该将其删除。location指令始终需要 URI(URL 中域后的部分)进行匹配。

您的配置中的另一个问题是您root在块内使用了指令location。您应该root仅在server级别中使用,然后如果您需要为某些 URL 位置指定其他路径,则alias在这些位置内使用指令。

相关内容