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

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);

验证方式:
在这里插入图片描述
可以在响应头中,查看具体访问的代理地址。


http://www.kler.cn/a/507235.html

相关文章:

  • redhat安装docker 24.0.7
  • AIGC时代:如何快速搞定Spring Boot+Vue全栈开发
  • Linux浅谈——管道、网络配置和客户端软件的使用
  • Outlook 无网络连接[2604] 错误解决办法
  • AI 编程工具—Cursor进阶使用 阅读开源项目
  • JAVA安全—JWT攻防Swagger自动化Druid泄露
  • 使用 Wireshark 分析 TCP 吞吐瓶颈
  • 用java实现一个猜拳小游戏
  • electron 获取本机 ip 地址
  • 测试人员面试需要掌握的内容
  • 谷歌浏览器与Safari的性能对比
  • Go基础之环境搭建
  • 无人机吊运详解,极大提高运输效率降低人工成本
  • HTTP 安全:HTTPS 原理与配置
  • 测试工程师的linux 命令学习(持续更新中)
  • WPF如何跨线程更新界面
  • EasyExcel的应用
  • springcloud中的Feign调用
  • GB44495-2024 汽车整车信息安全技术要求 - V2X部分前置要求
  • javaScript 入门与程序设计
  • 北京科技创新实力强劲,将在 CES Asia 2025 精彩呈现
  • halcon opencv-python C# 自适应不同大小图像并保持纵横比
  • DNS介绍与部署-Day 01
  • Lambda 架构之批处理层深度解析:从原理到 Java 实战
  • DETR论文阅读
  • openCV项目实战——信用卡数字识别