专有云datav代理踩坑

简介: 记录了datav专有云版本下,转发代理的实现

专有云datav代理踩坑

问题描述

datav开发完成之后,发布是通过在datav页面点击发布后获得发布链接,

image.png

一般情况下都是通过直接访问发布链接的方式进行页面访问,但是在一些特定的场景下会需要将这个地址进行代理后再进行访问,项目上碰到的场景是这样的

  1. datav版本为专有云datav版本,部署在内网服务器上,并且没有进行互联网透出
  2. 部分页面需要通过互联网方式进行访问

解决过程

默认情况下datav的访问链路为

image.png

想要开通公网访问的话,最直接的方式就是配置一个映射代理,链路如下:

image.png

这个映射配置比较简单,很快我们就配置完成了,但是在随之后的验证中发现了一个致命的问题导致页面无法正常访问:

  1. 互联网映射域名和内网的DataV服务的域名不一致
  2. DataV服务的域名是通过配置的方式硬编码在了配置文件里,没有根据当前实际访问的代理域名地址对对应的资源文件进行替换或者使用相对路径进行访问

以上两点直接导致的后果是:DataV服务没有办法被代理!

问题到这里似乎无解了,除非是互联网映射的域名保持和内网访问的域名一致,这个申请下来又是需要不少的时间,在与DataV研发团队的沟通中,我们摸索出了另外一条路:

image.png

在这里的nginx,不仅仅是转发的功能而已,还用到了它的插件sub_filter,简而言之,就是在转发的时候查找和替换对应的文本,这个插件是需要单独编译安装的,安装完成后,对nginx进行配置,核心点在于配置需要替换的文本

          proxy_set_header Accept-Encoding "";
          sub_filter '待替换的文本' '替换后的文本';
          sub_filter_types  css/html;
          sub_filter_once off;

同时这里也需要注意一个坑,当接收请求需要压缩的时候 Accept-Encoding配置为gzip时,sub_filter替换会失效,所以在这里增加了一个配置proxy_set_header Accept-Encoding "";  声明不进行压缩。

至此,页面已经能够通过代理的方式进行访问。

后续

在发布的datav页面开启token校验的时候,此时会涉及到页面的Cookie的设置,因为我们上面是通过nginx进行了一次代理,就需要增加nginx的配置proxy_cookie_domain 代理前的域名 代理后的域名; 来实现前后端cookie域名转换,保证顺利传递。

image.png

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
监控 API C++
一个更好的文件监控类,基于 DotNet 官方提供的 FileSystemWatcher
一个更好的文件监控类,基于 DotNet 官方提供的 FileSystemWatcher
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
802 0
|
存储 JSON 安全
Go语言切片,使用技巧与避坑指南
Go语言中的切片(Slice)是动态引用数组的高效数据结构,支持扩容与截取。本文从切片基础、常用操作到高级技巧全面解析,涵盖创建方式、`append`扩容机制、共享陷阱及安全复制等内容。通过代码示例详解切片特性,如预分配优化性能、区分`nil`与空切片、处理多维切片等。掌握这些核心知识点,可编写更高效的Go代码。
472 2
|
11月前
|
Java 数据安全/隐私保护 Spring
【面向接口开发(IOP)典型场景】底层组件如何实现回调通知上层应用系统?
本文介绍了在账务插件开发中,如何通过“面向接口编程”实现异步转账完成后的回调通知机制。通过定义回调接口 `TransferCallback`,账务组件在异步操作完成后可通知上层应用进行后续业务处理。文章提供了纯 Java 和 Spring 两种实现方式的代码示例,展示了接口在插件化架构中的重要作用,体现了面向接口编程在解耦与扩展方面的优势。
306 1
|
API 网络架构
【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法
【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法
504 1
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
814 60
|
图形学 异构计算
Siemens NX何时支持GPU光线追踪与图形加速?
NX的Ray Tracing Studio在NX 1847及更早版本中不支持NVIDIA RTX板的GPU加速,仅依赖CPU,性能较慢。从NX 1872起支持GPU加速。自2023年6月版起,若无GPU,NX将显示图形配置错误并记录到syslog文件,建议使用支持的GPU以避免未定义行为。更多支持的硬件和图形信息,请参阅鼎森电脑整理的文件“NX-Graphics-Certification-Table_20241207.xlsx”。链接:https://pan.baidu.com/s/1_FpOoJU_IrExnhVXyzB4cw?pwd=676s 提取码: 676s
891 1
|
存储 算法 Linux
C语言 多进程编程(一)进程创建
本文详细介绍了Linux系统中的进程管理。首先,文章解释了进程的概念及其特点,强调了进程作为操作系统中独立可调度实体的重要性。文章还深入讲解了Linux下的进程管理,包括如何获取进程ID、进程地址空间、虚拟地址与物理地址的区别,以及进程状态管理和优先级设置等内容。此外,还介绍了常用进程管理命令如`ps`、`top`、`pstree`和`kill`的使用方法。最后,文章讨论了进程的创建、退出和等待机制,并展示了如何通过`fork()`、`exec`家族函数以及`wait()`和`waitpid()`函数来管理和控制进程。此外,还介绍了守护进程的创建方法。
C语言 多进程编程(一)进程创建
|
数据采集 Java Python
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
本文介绍了一种使用Python从笔趣阁网站爬取小说内容的方法,并通过引入多线程技术大幅提高了下载效率。文章首先概述了环境准备,包括所需安装的库,然后详细描述了爬虫程序的设计与实现过程,包括发送HTTP请求、解析HTML文档、提取章节链接及多线程下载等步骤。最后,强调了性能优化的重要性,并提醒读者遵守相关法律法规。
636 0
|
消息中间件 Java Kafka