自学内容网 自学内容网

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

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


原文地址:https://blog.csdn.net/weixin_43705313/article/details/145188726

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!