在做视频下载的时候,当
<a>的href属性为不同源链接时,download属性是无效的,因此决定用nginx做代理绕过同源策略,然而接口返回的视频链接域名是有可能变化的,因此不能写死proxy_pass,需要根据匹配到的location来决定proxy_pass的值。
先上代码
location ~ ^/download_assets/(.*)$ {
resolver 114.114.114.114; # 指定dns解析服务器
rewrite ^/download_assets/(http|https):/+([^/]*)(.*)$ $3 break; # 改写
proxy_pass $1://$2; # 代理地址
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
思路
- 修改接口返回的视频链接
- 头部拼上
/download_assets/,使其走nginx服务 - 域名也要拼上,为了在
nginx中获取并赋值给proxy_pass
- 头部拼上
- 定义
location,~表示区分大小写正则,匹配/download_assets的请求 - 定义
rewrite,改写路径并获取主要的路径参数 - 定义
proxy_pass,可以使用$从rewrite的正则中获取相应的字符,获取域名并赋值
注意
http://的正则应该是/(http|https):\/+/,而不能是/(http|https):\/\/,虽然第一种写法在js中是生效的,我也不清楚是为什么proxy_pass不能直接获取整个域名赋值,必须是http://$2或者$1://$2,否则是无效的- 本地开发则需要配置
webpack的devServer