我尝试保护 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
在这些位置内使用指令。