如果用户尝试直接在浏览器中访问图像文件,我该如何重定向?我仍然希望保留允许社交媒体网站通过热链接嵌入我们的图像的功能。我只希望只有当用户通过浏览器直接访问图像时才进行重定向。
这是我的 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;
if ($invalid_referer = "0") {
return 301 http://view.example.com/artwork/$filenum; }
}
}
nginx 错误日志
2022/01/19 12:09:23 [error] 7426#7426: *30 open() "/usr/share/nginx/html/c/600x1200_90_webp/img-master/img/2021/06/09/00/00/05/90423484_p0_master1200.jpg" failed (2: No such file or directory), client: xxx.xxx.xxx.xxx, server: img.example.com, request: "GET /c/600x1200_90_webp/img-master/img/2021/06/09/00/00/05/90423484_p0_master1200.jpg HTTP/1.1", host: "img.example.com"
重定向不起作用,但如果我尝试访问任何图像文件,它就会给我一个 404 错误。我将其设置为反向代理站点,因此我没有定义根路径。我该如何解决这个问题?
答案1
由于您没有定义图像位置的根路径,因此nginx
使用默认路径 - /usr/share/nginx/html/
。如果您希望获取这些文件,则也proxy_pass
需要将配置复制proxy_pass
到此位置。