当前位置: 首页 > news >正文

nginx中间代理。前端下载资源跨域,太大不想放到服务端处理。

一、检测:nginx 是否支持lua

nginx -V | grep lua

二、nginx的配置

location /proxy/ { resolver 8.8.8.8 114.114.114.114 valid=300s; resolver_timeout 10s; # 1. 用 Lua 解码 URL 参数 set_by_lua_block $target_url { local url = ngx.var.arg_url if not url or url == "" then return "" end -- 解码 URL(处理 %3A %2F 等) local decoded = ngx.unescape_uri(url) -- 验证是否是合法 URL if not decoded:match("^https?://") then return "" end return decoded } # 2. 参数验证 if ($target_url = "") { return 400 '{"error":"Missing or invalid url parameter"}'; } # 3. 可选:白名单限制(建议开启) if ($target_url !~ ^https?://([a-zA-Z0-9_-]+\.)*coze\.cn(/|$)) { return 403 '{"error":"Domain not allowed"}'; } # 4. 清除可能干扰的请求头 proxy_set_header Origin ""; proxy_set_header Referer ""; # 5. 模拟真实浏览器请求 proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"; proxy_set_header Accept "*/*"; proxy_set_header Accept-Language "zh-CN,zh;q=0.9,en;q=0.8"; # 6. 核心代理 proxy_pass $target_url; proxy_redirect off; proxy_set_header Host $proxy_host; # 7. SSL 配置 proxy_ssl_server_name on; proxy_ssl_protocols TLSv1.2 TLSv1.3; proxy_ssl_verify off; # 8. 视频流优化:关闭缓冲 proxy_buffering off; proxy_request_buffering off; # 9. 不强制下载(让浏览器根据 Content-Type 处理) # proxy_hide_header Content-Disposition; # add_header Content-Disposition "attachment" always; # 10. CORS 头 add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always; add_header Access-Control-Allow-Headers "*" always; add_header Access-Control-Expose-Headers "Content-Disposition, Content-Length" always; # 11. 预检请求 if ($request_method = 'OPTIONS') { return 204; } # 12. 超时设置 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 60s; }

三、vue示例

// 代理请求工具函数 function proxyFetch(targetUrl) { // 必须编码,否则 & 和 = 会被当作查询参数解析 const encodedUrl = encodeURIComponent(targetUrl); return fetch(`/proxy/?url=${encodedUrl}`, { method: 'GET' }); } // 使用示例 async function loadVideo(videoUrl) { try { const response = await proxyFetch(videoUrl); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const blob = await response.blob(); const objectUrl = URL.createObjectURL(blob); const video = document.querySelector('video'); video.src = objectUrl; } catch (error) { console.error('Failed:', error); } } // 调用 const cozeVideoUrl = 'https://lf6-bot-platform-tos-sign.coze.cn/bot-studio-bot-platform/bot_files/3850925219778179/video/quicktime/7641920355644571682/7e9889f1-8059-4846-bbc1-2f1fea5ad040.mp4?x-expires=1779878095&x-signature=5mgX3n%2BmKwjzWIEP%2Ffm8xTODlZQ%3D'; loadVideo(cozeVideoUrl);
http://www.cnnetsun.cn/news/2533334.html

相关文章:

  • 终极Scribd电子书下载指南:3步打造个人离线图书馆
  • 【软件架构师-综合题(3)】软件工程知识点
  • FFXIV国际服汉化终极指南:3步实现中文界面完整教程
  • 《男人来自火星,女人来自金星4:生活篇》第7-9章深度解读:告别节食,30分钟开启健康人生
  • EdgeRemover:3步完成Microsoft Edge浏览器的高效卸载与重装指南
  • 鸿蒙意图框架快速入门:5 分钟实现你的第一个意图
  • 给机器人一个值得信赖的“判断力”
  • 少走弯路:盘点2026年备受推崇的的降AI率平台
  • 用 .NET + Avalonia 打造你的专属 AI Copilot 桌面端
  • RISC-V Linux内核启动:relocate汇编函数与MMU页表切换深度解析
  • 洛雪音乐音源终极指南:三步免费解锁全网高品质音乐资源
  • Claude法律文档分析落地难题全破解:从PDF乱码到条款溯源,7步构建高精度法律AI工作流
  • 3分钟上手跨平台资源下载神器:轻松获取微信视频号、抖音无水印内容
  • 嵌入式TF卡硬核横评:A2/U3性能实测与选型避坑指南
  • 汽车12V电源防护:P6KE TVS二极管选型、设计与实战指南
  • 权威深度指南:使用iperf3 Windows版进行网络性能评估与优化实战
  • 3分钟快速解密:qmcdump让QQ音乐加密音频重获自由
  • 工业视觉光源颜色选型全攻略|白/红/蓝/绿光适用场景、原理与避坑细则
  • Taotoken 模型广场在项目技术选型中的实际应用感受
  • 2026降AI率工具红黑榜:AI智能降重工具怎么选?用数据说话!
  • mysql从5.7升级到8.0后ONLY_FULL_GROUP_BY是升级后应用报错的第一大原因
  • AI Agent审计闭环尚未建立?独家披露某省审计厅已运行187天的“四维穿透式”审计框架(含可观测性埋点规范V2.3)
  • 3步解锁跨平台资源下载:res-downloader实战手册
  • 终极指南:如何用TrollInstallerX轻松解锁iOS越狱新世界
  • 利用Taotoken模型广场为AIGC应用快速进行模型选型与测试
  • Agent怎样做到在信创环境全栈兼容?2026企业级智能体信创适配技术全解析
  • RimSort终极指南:3步解决环世界MOD加载顺序混乱的完整方案
  • 【限时公开】Midjourney火焰生成黄金三角法则:Chaos=35 + Style=raw + --sref 8921(附2024Q3火效Prompt库下载密钥)
  • 不会 CSS 也能做出惊艳 PPT!Frontend Slides这个开源 Claude Code 技能让 AI 帮你生成 12 种风格演示文稿,告别千篇一律的紫渐变
  • 从 vn.py 迁到天勤:事件引擎与 wait_update 怎么转