nginx 根据参数动态代理

一、问题描述

nginx反向代理配置一般都是配置静态地址,比如:

server {listen 80;location / {proxy_pass http://myapp1;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}

这个反向代理表示访问80端口跳转到  http://myapp1 地址。
现在有需求代理的目的地址由动态传参决定,不能配置成静态的,传的参数为URL,然后反向代理到URL地址。

在配置过程中,会解决跳转后跨域问题和代理后地址自动拼接问题。

二、解决方案

1、nginx配置两个要跳转的地址作测试

地址一(index81.html 放在nginx/html/index81.html):

server {listen       81;server_name  localhost;location / {root   html;index  index81.html index81.htm;}}

地址二(index82.html 放在nginx/html/index82.html):

server {listen       82;server_name  localhost;location / {root   html;index  index82.html index82.htm;}}

2、动态代理配置

server {listen       80;server_name  localhost;rewrite ^/old-url$ /new-url permanent;location /_proxy/ {# 通过正则截取路由中的 sub urlif ($request_uri ~* "/_proxy/(.*)") {set $proxy_url $1;}# 解析请求地址,并进行反向代理set $is_matched 0;if ($proxy_url ~* "^(http|ws)(s?):\/\/?([a-zA-Z0-9\-\.]+:?\d*)([^\?]*)") {set $is_matched 1;set $proxy_protocol http$2;set $proxy_host $3;set $proxy_uri $4;set $proxy_url $proxy_protocol://$proxy_host;rewrite ^ / break;proxy_pass $proxy_url;}}}

 如代码所示,/_proxy 为代理匹配字符串,rewrite 作用有两点:

        1、防止代理后的址带着 /_proxy 后边的路径。

        2、浏览器的地址栏里地址不会变,还是127.0.0.1:80/....,这样就解决了跨域问题

最后,粘贴全部代码,包括注释等等

server {listen       80;server_name  localhost;rewrite ^/old-url$ /new-url permanent;#charset koi8-r;#access_log  logs/host.access.log  main;location /_proxy/ {# 被代理路径为域名需要指定dns# resolver 114.114.114.114 valid=3600s;# 通过正则截取路由中的 sub urlif ($request_uri ~* "/_proxy/(.*)") {set $proxy_url $1;}# 解析请求地址,并进行反向代理set $is_matched 0;if ($proxy_url ~* "^(http|ws)(s?):\/\/?([a-zA-Z0-9\-\.]+:?\d*)([^\?]*)") {set $is_matched 1;set $proxy_protocol http$2;set $proxy_host $3;set $proxy_uri $4;set $proxy_url $proxy_protocol://$proxy_host;rewrite ^ / break;proxy_pass $proxy_url;}# if ($is_matched = 1) {# return 200 '{"code": 404, "message": "已经匹配到了!", "proxy_url": $proxy_url}';# }# if ($is_matched = 0) {# return 200 '{"code": 404, "message": "The proxy url is invalid!", "proxy_url": $proxy_url}';# }# Host 主机名,为了避免目标服务做限制此处采用目标地址的 Hostproxy_set_header Host $proxy_host;# X-Real-IP 将真实访问者的远端 IP 地址转发给代理服务器proxy_set_header X-Real-IP $remote_addr;# X-Forwarded-For 标记客户端通过代理连接到服务器的源 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# X-Forwarded-Host 标记客户端通过代理连接到服务器的原始主机proxy_set_header X-Forwarded-Host $host:$server_port;# X-Forwarded-Server 代理服务器的主机名proxy_set_header X-Forwarded-Server $host;# X-Forwarded-Port 定义客户端请求的原始端口proxy_set_header X-Forwarded-Port $server_port;# X-Forwarded-Proto 标记客户端通过代理连接到服务器的协议proxy_set_header X-Forwarded-Proto $scheme;# proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;}}

三、效果演示


http://127.0.0.1/_proxy/http://127.0.0.1:83

http://127.0.0.1/_proxy/http://127.0.0.1:82

四、参考博客
Nginx动态反向代理(2022/11/12)-CSDN博客 文章浏览阅读4.5k次,点赞3次,收藏15次。工作中经常遇到需要在前端访问第三方平台接口的情况,前端直接访问会遇到跨域、http 禁止调用 https 等问题,故需要在后台通过 Nginx 进行反向代理。随着第三方平台的增加,反向代理配置文件越来越复杂,因此笔者在考虑通过参数传递目标地址实现动态反向代理,本文将详细介绍实现过程。_nginx动态反向代理https://blog.csdn.net/qq_44797987/article/details/127818406#comments_31357922

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云优惠券领取入口_先领取再下单_2024腾讯云优惠攻略

腾讯云优惠代金券领取入口共三个渠道,腾讯云新用户和老用户均可领取8888元代金券,可用于云服务器等产品购买、续费和升级使用,阿腾云atengyun.com整理腾讯云优惠券(代金券)领取入口、代金券查询、优惠券兑换码使用方法…

【硬件相关】IB网/以太网基础介绍及部署实践

文章目录 一、前言1、Infiniband网络1.1、网络类型1.2、网络拓扑1.3、硬件设备1.3.1、网卡1.3.2、连接线缆a、光模块b、线缆 1.3.4、交换机 2、Ethernet网络 二、部署实践(以太网)1、Intel E810-XXVDA21.1、网卡信息1.2、检查命令1.2、驱动编译 2、Mella…

C++_数据结构_数据的输入

作用 用于从键盘获取数据 关键字 cin >> 变量示例

YOLOv5论文作图教程(3)— 关于论文作图教程系列采用线上培训的通知(终结篇)

前言:Hello大家好,我是小哥谈。YOLOv5论文作图教程系列其实是我特别擅长的一个模块(本人产品经理出身),自从本系列发表了两篇文章之后,一直没有再继续更新,主要原因是通过文字无法比较好的表达软件的功能及使用,并且也无法达到比较好的培训效果。为了确保大家可以彻底掌…

数据库原理(一)

1、基本概念 学号姓名性别出生年月籍贯220101张三男2003江苏220102李四男2003山东220103王五女2003河北220104赵六女2003天津220105张四男2003北京220106李五女2003江苏220107王六女2003山东220108张七男2003河北220109张九男2003天津220110李十女2003北京 1.1数据&#xff0…

基于springboot+vue的相亲网站

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

软考54-上午题-【数据库】-关系模式的范式-真题

一、范式总结 第一步,先求候选码,由此得到:主属性、非主属性。 二、判断部分函数依赖的技巧 【回顾】:部分函数依赖 (X,Y)——>Z; X——>Z 或者 Y——>Z 题型:给…

Java中的图数据库应用:Neo4j入门

第1章:引言 在数据驱动的时代,咱们处理的不仅仅是数字和文本,还有复杂的关系和网络。想象一下社交网络中人与人之间错综复杂的联系,或者是互联网上网页之间的链接关系,传统的表格数据库已经难以高效地处理这些关系密集…

每日leetcode--最大数

正题之前 三玖yyds!!! 题目 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整…

梵宁教育:警惕网络诈骗,守护青春未来

随着互联网的普及和科技的飞速发展,网络已经深入到了我们生活的方方面面,为大学生提供了前所未有的便利与机遇。然而,与此同时,网络诈骗也悄然滋生,成为威胁大学生安全的一大隐患。梵宁教育在此郑重提醒广大大学生&…

LeetCode 热题100 刷题笔记

一:哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。 1.两数之和 题目链接:. - 力扣(LeetCode…

Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析

3.2.3 原理分析 3.2.3.1 源码跟踪 前面我们讲解了在项目当中引入第三方依赖之后,如何加载第三方依赖中定义好的bean对象以及配置类,从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。 源码跟踪技巧…

[VSCode插件] 轻量级静态博客 - MDBlog

MDBlog VSCode插件,基于Markdown的轻量级静态博客系统,同时支持导出为可以部署的静态博客。 仓库 MDBlog 1. Features 博客基础功能:分类管理、文章管理、自动生成索引快捷指令:快捷输入表格、mermaid、wavedrom、代码块发布&a…

软考重点题解析-基础知识

1.加密技术:分为对称加密技术:文件的加密和解密使用相同的密钥 和 非对称加密技术:加密和解密不同的密钥,分别是公开密钥和私有密钥。 例题:若A,B两人分别在认证机构(CA)M,N处获得证书&…

php连接hdfs初步探索

一、phdfs拓展 结果:暂时舍弃 安装此拓展时,无法make成功,因为缺少hdfs.n文件。 换了其他版本的拓展包,并编译都没有找到此文件。 后搜到官网的相关资料,此hdfs.h的文件路径的地址是$HADOOP_HDFS_HOME/include/hdfs…

数据增加

目录 增加数据 实现数据增加,保存新的内容 注意 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 增加数据 由于 emp 表中的数据对日后的开发依然有用处,所以在讲解更新之前 建议将emp 表数据做一个复制。将…

一个脚本两步计算材料Raman谱(附数据处理和绘图脚本)

在以往推送中已经介绍了相当多的计算材料Raman的方法,使用的软件主要为Phonopy-Spectroscopy,相关软件还有vasp,phonopy,phono3py等。 Phonopy-Spectroscopy计算材料红外和Raman光谱 Phonopy-Spectroscopy 计算红外和拉曼光谱 也…

QT中提升为自定义控件的方法

一.介绍 提升为自定义的控件用法:先要写好自定义控件后,再添加,在频繁使用同一控件时,的确非常的高效。 同时导入别人开发的控件操作方法也类似。 二.下面以自定义的QPushButton作一个很简单的例子&#x…

精品SSM的教学管理系统课程作业成绩

《[含文档PPT源码等]精品基于SSM的教学管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术:HTML5,CSS3、Jav…

esp32 C3和S3 开发板电流对比

出去好奇用合宙家的 lot power 测了两块开发板的运行电流。 esp32 S3 (嘉立创开发板 8N8 版本) 模式 电流downloa模式49 毫安空代码91 毫安light mode27 毫安deep mode25 毫安delay 40 毫安 esp32 C3 无串口芯片 (合宙 9.9 元版本) 模式 …