nginx 配置代理,根据 不同的请求头进行转发至不同的代理
解决场景:下载发票的版式文件,第三方返回的是url链接地址,但是服务是部署在内网环境,无法访问互联网进行下载。此时需要进行走反向代理出去,如果按照已有套路,就是根据不同的访问前缀,跳转不同的location,我们有四十几个路径,就需要配置40多个location ,比较繁琐。此时可以使用nginx里的map 属性,进行配置,配置如下:
nginx配置文件
#user nobody;
worker_processes 6;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 65535 ;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 120s;#gzip on;# 增大 map_hash_bucket_size 的值,可以根据实际情况调整大小map_hash_bucket_size 200; # 定义映射关系map $http_x_target_server $target_server {default "";"pubapi.jcsk100.com" "https://pubapi.jcsk100.com";"rocgw.jcsk100.com" "https://rocgw.jcsk100.com/external/";"taxsapivip.jcsk100.com" "https://taxsapivip.jcsk100.com/v1/api/s";"taxsapi.holytax.com" "https://taxsapi.holytax.com/v1/api/s";"dppt.shanghai.chinatax.gov.cn" "https://dppt.shanghai.chinatax.gov.cn:8443";"dppt.guangdong.chinatax.gov.cn" "https://dppt.guangdong.chinatax.gov.cn:8443";"dppt.xiamen.chinatax.gov.cn" "https://dppt.xiamen.chinatax.gov.cn:8443";"dppt.tianjin.chinatax.gov.cn" "https://dppt.tianjin.chinatax.gov.cn:8443";"dppt.chongqing.chinatax.gov.cn" "https://dppt.chongqing.chinatax.gov.cn:8443";"dppt.neimenggu.chinatax.gov.cn" "https://dppt.neimenggu.chinatax.gov.cn:8443";"dppt.dalian.chinatax.gov.cn" "https://dppt.dalian.chinatax.gov.cn:8443";"dppt.qingdao.chinatax.gov.cn" "https://dppt.qingdao.chinatax.gov.cn:8443";"dppt.shaanxi.chinatax.gov.cn" "https://dppt.shaanxi.chinatax.gov.cn:8443";"dppt.sichuan.chinatax.gov.cn" "https://dppt.sichuan.chinatax.gov.cn:8443";"dppt.henan.chinatax.gov.cn" "https://dppt.henan.chinatax.gov.cn:8443";"dppt.fujian.chinatax.gov.cn" "https://dppt.fujian.chinatax.gov.cn:8443";"dppt.jilin.chinatax.gov.cn" "https://dppt.jilin.chinatax.gov.cn:8443";"dppt.yunnan.chinatax.gov.cn" "https://dppt.yunnan.chinatax.gov.cn:8443";"dppt.ningbo.chinatax.gov.cn" "https://dppt.ningbo.chinatax.gov.cn:8443";"dppt.shenzhen.chinatax.gov.cn" "https://dppt.shenzhen.chinatax.gov.cn:8443";"dppt.gansu.chinatax.gov.cn" "https://dppt.gansu.chinatax.gov.cn:8443";"dppt.shanxi.chinatax.gov.cn" "https://dppt.shanxi.chinatax.gov.cn:8443";"dppt.zhejiang.chinatax.gov.cn" "https://dppt.zhejiang.chinatax.gov.cn:8443";"dppt.hainan.chinatax.gov.cn" "https://dppt.hainan.chinatax.gov.cn:8443";"dppt.liaoning.chinatax.gov.cn" "https://dppt.liaoning.chinatax.gov.cn:8443";"dppt.jiangsu.chinatax.gov.cn" "https://dppt.jiangsu.chinatax.gov.cn:8443";"dppt.jiangxi.chinatax.gov.cn" "https://dppt.jiangxi.chinatax.gov.cn:8443";"dppt.guangxi.chinatax.gov.cn" "https://dppt.guangxi.chinatax.gov.cn:8443";"dppt.hebei.chinatax.gov.cn" "https://dppt.hebei.chinatax.gov.cn:8443";"dppt.heilongjiang.chinatax.gov.cn" "https://dppt.heilongjiang.chinatax.gov.cn:8443";"dppt.xinjiang.chinatax.gov.cn" "https://dppt.xinjiang.chinatax.gov.cn:8443";"dppt.hubei.chinatax.gov.cn" "https://dppt.hubei.chinatax.gov.cn:8443";"dppt.beijing.chinatax.gov.cn" "https://dppt.beijing.chinatax.gov.cn:8443";"dppt.anhui.chinatax.gov.cn" "https://dppt.anhui.chinatax.gov.cn:8443";"dppt.shandong.chinatax.gov.cn" "https://dppt.shandong.chinatax.gov.cn:8443";"dppt.hunan.chinatax.gov.cn" "https://dppt.hunan.chinatax.gov.cn:8443";"dppt.guizhou.chinatax.gov.cn" "https://dppt.guizhou.chinatax.gov.cn:8443";"dppt.xizang.chinatax.gov.cn" "https://dppt.xizang.chinatax.gov.cn:8443";"dppt.ningxia.chinatax.gov.cn" "https://dppt.ningxia.chinatax.gov.cn:8443";"dppt.qinghai.chinatax.gov.cn" "https://dppt.qinghai.chinatax.gov.cn:8443";}#代理地址server {listen 8444;location / {# 响应头打印 $http_x_target_server 和 $target_server 的值add_header X-Target-Server $http_x_target_server;add_header Target-Server $target_server;# 默认不传给北京的地址if ($target_server = "") {set $target_server "https://dppt.beijing.chinatax.gov.cn:8443";}proxy_pass $target_server;proxy_cache off;proxy_redirect off;proxy_connect_timeout 5m;proxy_send_timeout 5m;proxy_read_timeout 5m;proxy_buffer_size 10m;proxy_buffers 256 10m;proxy_busy_buffers_size 10m;proxy_temp_file_write_size 10m;add_header Cache-Control no-cache;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}# 添加 resolver 指令,使用 Google 的公共 DNS 服务器,根据项目上的情况进行配置,使用$target_server必须配置,写死地址则不需要resolver 8.8.8.8;
}
Java代码:
// header 传入nginx里的key即可 就会指定到对应的目标server里URL url = new URL(urlString);URLConnection connection = url.openConnection();connection.setRequestProperty("X-Target-Server", header);
验证方式:
可以在响应头中,查看具体访问的代理地址。
相关文章:

nginx 配置代理,根据 不同的请求头进行转发至不同的代理
解决场景:下载发票的版式文件,第三方返回的是url链接地址,但是服务是部署在内网环境,无法访问互联网进行下载。此时需要进行走反向代理出去,如果按照已有套路,就是根据不同的访问前缀,跳转不同的…...

类模板的使用方法
目录 类模板的使用方法 1.类模板语法 2.类模板和函数模板区别 3.类模板中成员函数创建时机 4.类函数对象做函数参数 5.类模板和继承 6.类模板成员函数类外实现 7.类模板分文件编写 person.hpp 实现cpp文件: 8.类模板与友元 9.类模板案例 MyArray.hpp …...

高级Python Web开发:FastAPI的前后端集成与API性能优化
高级Python Web开发:FastAPI的前后端集成与API性能优化 目录 🛠️ 前后端集成的基本原理与实践🚀 FastAPI的API设计与实现📈 API性能测试与负载测试 📊 使用Locust进行API性能测试💥 使用Apache JMeter进…...

期权懂|期权的溢价率和杠杆率有什么区别?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 期权的溢价率和杠杆率有什么区别? 一、定义篇 期权溢价率:这是一个细腻地描绘了期权价格与其内在价值之间微妙差异的指标。想象一下,期权价格就…...

分布式ID的实现方案
1. 什么是分布式ID 对于低访问量的系统来说,无需对数据库进行分库分表,单库单表完全可以应对,但是随着系统访问量的上升,单表单库的访问压力逐渐增大,这时候就需要采用分库分表的方案,来缓解压力。 …...

Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)
1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施,并加速了在商业产品中使用机器感知。作为BSD许可的产品&…...

如何学习网络安全?有哪些小窍门?
学好网络安全其实没有所谓的捷径,也没有什么小窍门。 入门网络安全首先要有浓厚的学习兴趣,不然很容易就变成了从入门到放弃了。 其次要能静下心,踏踏实实的打好基础。如果你是零基础,建议从Web安全入手,课程难度相对…...

Dart语言的数据结构
Dart语言中的数据结构探讨 引言 Dart是一种现代化的编程语言,主要用于构建移动应用、Web应用和服务端应用。随着应用程序的复杂性日益增加,选择合适的数据结构显得尤为重要。数据结构不仅影响程序的性能,也影响程序的可维护性和可扩展性。本…...

TabPFN - 表格数据基础模型
文章目录 一、关于 TabPFN🌐TabPFN生态系统 二、快速入门🏁1、安装2、基本用法 三、使用技巧💡四、开发🛠️1、设置环境2、在提交之前3、运行测试 一、关于 TabPFN TabPFN是表格数据的基础模型,它优于传统方法&#x…...

AOF日志:宕机了Redis如何避免数据丢失?
文章目录 AOF 日志是如何实现的?三种写回策略日志文件太大了怎么办?AOF 重写会阻塞吗?小结每课一问 更多redis相关知识 如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使用&…...

MAC上安装Octave
1. 当前最新版Octave是9.3版本,需要把mac os系统升级到14版本(本人之前的版本是10版本) https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档:Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…...

C 语言中二维数组的退化
目录 1. 一维数组的退化 2.字符串数组的退化 3. 二维数组的退化 3.1 为什么退化为 int (*)[4] 而不是 int **? 3.2举例说明 3.3 .总结 在 C 语言中,数组名在大多数情况下会退化为指向其第一个元素的指针,这种机制称为数组退化…...

Notion 推出捏脸应用 | Deving Weekly #15
CEF-Detector-X 现在 Chromium 占据了桌面应用的大壁江山,典型的有 Electron 框架,底层就是基于 Chromium 内核,上百 M 的臃肿包体积一直别人诟病。 CEF-Detector-X 可以检测你电脑有多少个 基于 Chromium 应用,并且会生成一份「…...

C# Linq 查询
1.Linq 查询表达式基础 Linq 查询应用程序始终将源数据视为 IEnumerable<T> 或 IQueryable<T> 集合。 LINQ查询表达式包含8个基本子句,分别为from、select、group、where、orderby、join、let和into。 子 句备注from指定数据源和范围变量select指定当执行查询…...

ES7【2016】、ES8【2017】新增特性
ES7【2016】新增特性 幂指数操作符 在ES7【2016】中新增了幂指数操作,幂指数操作符是**。它用于指数计算 基本语法:baseValue ** exponent 参数说明:baseValue是基数,exponent是指数。 let base 2; let exponent 4; let resul…...

64细分步进电机驱动器TMC2209
封装和丝印 典型电路1 典型电路2 应用 兼容设计升级 3D 打印机 打印机、POS 办公和家庭自动化 纺织、缝纫机 闭路电视, 安保 ATM, 现金回收机 暖 通 空调 电池供电设备 特点和优势 2 相步进电机,线圈电流(峰值)高达…...

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等
在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…...

linux 安装PrometheusAlert配置钉钉告警
在 Linux 上安装 PrometheusAlert 并配置钉钉告警的步骤如下: 1. 准备工作 钉钉机器人: 在钉钉群中创建一个机器人,获取 Webhook URL。示例 Webhook URL:https://oapi.dingtalk.com/robot/send?access_token=your_dingtalk_token。PrometheusAlert 安装包: 从 Prometheus…...

【华为路由/交换机的ssh远程设置】
华为路由/交换机的ssh远程设置 R1(client):10.1.1.1 R2(server):10.1.1.2 R2服务端配置: 生成本机密钥 查看生成的密钥 设置AAA授权验证方式,并设置支持SSH协议 创建本地用户&…...

性能测试 - Locust WebSocket client
Max.Bai 2024.10 0. 背景 Locust 是性能测试工具,但是默认只支持http协议,就是默认只有http的client,需要其他协议的测试必须自己扩展对于的client,比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…...

html中鼠标位置信息
pageX:鼠标距离页面的最左边的距离,包括滚动条的长度。clientX:鼠标距离浏览器视口的左距离,不包括滚动条。offsetX:鼠标到事件源左边的距离。movementX:鼠标这次触发的事件的位置相对于上一次触发事件的位…...

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试
序言: 在大型电商、购物、直播活动期间,对于火爆流量的激增,如何保障业务稳定并且做到资源不浪费,自动回收。 场景:kubernetes 原生容器化承载业务流量(非云环境) 方案:kubernetes自…...

flutter 常用UI组件
文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)
在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现…...

hive表修改字段类型没有级连导致历史分区报错
一:问题背景 修改hive的分区表时有级连概念,指字段的最新状态,默认只对往后的分区数据生效,而之前的分区保留历史元数据状态。好处就是修改语句的效率很快,坏处就是如果历史分区的数据还有用,那就回发生分…...

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破
在信息技术应用创新的浪潮中,仓颉社区吸引了众多企业和开发者的积极参与,已有多个应用成功落地,展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用,并颁发…...

JS宏进阶:JS宏中的文件系统FileSystem
FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如:判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址:https://open.wps.cn/previous/docs/client/wpsLoad…...

XML序列化和反序列化的学习
1、基本介绍 在工作中,经常为了调通上游接口,从而对请求第三方的参数进行XML序列化,这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…...

npm ERR! code CERT_HAS_EXPIRED
很不幸看到这个提示。 查了很多网上的解决方案,都提到一个解决方案: npm install -g npmlatest 靠就是执行install报的错,你要我通过install来解决这个问题。可见大多数人都是转发,从不自己试试。 第二个是看系统时间。这个基…...

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存
快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui,并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...