如果通过浏览器直接访问图像文件,如何重定向用户? [nginx]
How to redirect user if direct access image files by browser? [nginx]
如果用户试图仅在浏览器中直接访问图像文件,我该如何重定向?我想仍然保留允许社交媒体网站通过热链接嵌入我们图像的能力。我只想在用户通过浏览器直接访问图像时重定向。
这是我的 nginx 配置文件
proxy_cache_path /var/www/img.example.com/htdocs/cache-store levels=1:2 keys_zone=pixstore:10m max_size=5g inactive=7d use_temp_path=off;
server {
server_name img.example.com www.img.example.com;
access_log /var/log/nginx/img.example.com.access.log ;
error_log /var/log/nginx/img.example.com.error.log;
add_header X-Proxy-Cache $upstream_cache_status;
location / {
proxy_cache pixstore;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://xxx.xxx.xxx.xxx:8090;
proxy_redirect off;
include proxy_params;
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
}
location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/((?<filenum>\d+)[^/]+\.(jpg|png|webp))$" {
valid_referers server_names;
proxy_pass http://xxx.xxx.xxx.xxx:8090;
if ($invalid_referer = "0") {
return 301 http://view.example.com/artwork/$filenum; }
}
}
重定向无效。我该如何解决这个问题?
我认为你最好使用 Node.js 之类的东西并根据正则表达式测试用户代理字符串,如果它包含浏览器具有的内容,如文本“[=13=” ]" "Firefox" 等然后重定向。
将社交媒体的代理 IP 列入白名单怎么样?
例如,这就是您找到 Facebook's agent
使用的所有 IP 地址的方法
whois -h whois.radb.net -- '-i origin AS32934' | grep ^route
然后将其添加到您的 nginx conf
location ~ /(?<filenum>\d+)[^/]*\.(jpg|png|webp)$ {
allow 69.63.176.0/20;
allow 66.220.144.0/20;
...
deny all;
error_page 403 http://view.example.com/artwork/$filenum;
}
也许,您可能想使用 this site
检查您的正则表达式
我会考虑推荐人。 Here is nginx module, and here is an article with some explanation, and gist 加上一段代码。所以基本上 - 你需要有模块然后你可以使用这样的东西:
# apply this rule on any location that’s an image using Regexp
location ~* \.(png|gif|jpg|jpeg|swf|ico)(\?[0-9]+)?$ {
# block empty blocked or whiteliste referers
valid_referers none blocked ~\.example.com ~\.google\. ~\.yahoo\. ~\.bing\. ~\.facebook\. ~\.fbcdn\.;
if ($invalid_referer) {
return 403;
}
}
其中 example.com
是您的域。让我知道进展如何 - 如果需要我会更新答案。
如果用户试图仅在浏览器中直接访问图像文件,我该如何重定向?我想仍然保留允许社交媒体网站通过热链接嵌入我们图像的能力。我只想在用户通过浏览器直接访问图像时重定向。
这是我的 nginx 配置文件
proxy_cache_path /var/www/img.example.com/htdocs/cache-store levels=1:2 keys_zone=pixstore:10m max_size=5g inactive=7d use_temp_path=off;
server {
server_name img.example.com www.img.example.com;
access_log /var/log/nginx/img.example.com.access.log ;
error_log /var/log/nginx/img.example.com.error.log;
add_header X-Proxy-Cache $upstream_cache_status;
location / {
proxy_cache pixstore;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://xxx.xxx.xxx.xxx:8090;
proxy_redirect off;
include proxy_params;
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
}
location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/((?<filenum>\d+)[^/]+\.(jpg|png|webp))$" {
valid_referers server_names;
proxy_pass http://xxx.xxx.xxx.xxx:8090;
if ($invalid_referer = "0") {
return 301 http://view.example.com/artwork/$filenum; }
}
}
重定向无效。我该如何解决这个问题?
我认为你最好使用 Node.js 之类的东西并根据正则表达式测试用户代理字符串,如果它包含浏览器具有的内容,如文本“[=13=” ]" "Firefox" 等然后重定向。
将社交媒体的代理 IP 列入白名单怎么样?
例如,这就是您找到 Facebook's agent
使用的所有 IP 地址的方法whois -h whois.radb.net -- '-i origin AS32934' | grep ^route
然后将其添加到您的 nginx conf
location ~ /(?<filenum>\d+)[^/]*\.(jpg|png|webp)$ {
allow 69.63.176.0/20;
allow 66.220.144.0/20;
...
deny all;
error_page 403 http://view.example.com/artwork/$filenum;
}
也许,您可能想使用 this site
检查您的正则表达式我会考虑推荐人。 Here is nginx module, and here is an article with some explanation, and gist 加上一段代码。所以基本上 - 你需要有模块然后你可以使用这样的东西:
# apply this rule on any location that’s an image using Regexp
location ~* \.(png|gif|jpg|jpeg|swf|ico)(\?[0-9]+)?$ {
# block empty blocked or whiteliste referers
valid_referers none blocked ~\.example.com ~\.google\. ~\.yahoo\. ~\.bing\. ~\.facebook\. ~\.fbcdn\.;
if ($invalid_referer) {
return 403;
}
}
其中 example.com
是您的域。让我知道进展如何 - 如果需要我会更新答案。