openresty+pdf.js 实现阿里云oss pdf 文件预览
以前有基于openresty + pdf.js 实现了pdf 文件预览的方案,但是对于阿里的oss 这个就有些不一样了(因为oss 有安全签名的处理)
问题说明
以前对于文件proxy 的配置
location /pdf {
proxy_redirect off;
# 开启了跨域访问,实际可以不用
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS;
// 此处是核心
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_body_buffer_size 10M;
client_max_body_size 10G;
set $agent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5";
set_by_lua_block $oss_url {
local ossurl= ngx.req.get_uri_args()["ossurl"];
ngx.log(ngx.ERR, "error: ", ossurl)
return ossurl
}
proxy_buffers 1024 4k;
proxy_read_timeout 300;
proxy_connect_timeout 80;
proxy_set_header User-Agent $agent;
proxy_pass $oss_url;
# 配置cache
proxy_cache pdf;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 304 302 24h;
}
解决方法
对于host 的传递使用$proxy_host 变量,这样可以保证传递的host 是正确的,oss 签名校验就没问题了,参考配置
location /pdf {
proxy_redirect off;
# 开启了跨域访问,实际可以不用
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS;
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_body_buffer_size 10M;
client_max_body_size 10G;
set $agent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5";
set_by_lua_block $oss_url {
local ossurl= ngx.req.get_uri_args()["ossurl"];
ngx.log(ngx.ERR, "error: ", ossurl)
return ossurl
}
proxy_buffers 1024 4k;
proxy_read_timeout 300;
proxy_connect_timeout 80;
proxy_set_header User-Agent $agent;
proxy_pass $oss_url;
# 配置cache
proxy_cache pdf;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 304 302 24h;
}
参考资料
https://www.cnblogs.com/rongfengliang/p/13693067.html
http://nginx.org/en/docs/varindex.html
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#var_proxy_host
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)