zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Embarcadero RAD Studio XE 15.0.3953.35171 原版下载及破解(这个以验证成功)
    画一个象windows 开始菜单的竖向标题
    bcb/delphi 透明Panel 控件源代码
    创建标题栏在左边的窗口界面
    【转载】(转自 www.sinoprise.com) 骇人听闻的CSP
    如何在托盘图标实现象window开始菜单中菜单左侧的图片效果
    BMP2AVI将BMP图象内容写入到AVI文件中去
    利用Delphi消息处理建立类似Windows开始菜单
    delphi中关键字inherited的理解
    有人会BCC32命令行下编译工程和组件的吗
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13913100.html
Copyright © 2011-2022 走看看