浅析Nginx 正向代理与反向代理

1、正向代理和反向代理的概念

无论是正向代理,还是反向代理,说到底,就是代理模式的衍生版本罢了。我们都学习过代理设计模式,都知道代理模式中有代理角色和被代理角色,为什么这么说,因为这两个角色对于我们理解正向和反向代理非常重要,下面会讲到。

下面我将引入这样一个场景,很多时候我们上网的网速特别慢,或者说由于×××问题导致我们无法访问到国外的网站,通常这些情况我们会通过给浏览器配置一个网速快的、可以×××的代理ip及端口号来解决我们的问题,那么配置好之后,大概的请求流程如下图所示:
浅析Nginx 正向代理与反向代理

我们首先请求代理服务器,然后代理服务器帮我们去快速访问国外的网站,对于这种代理方式,我们就称之为正向代理。请记住,上面说到代理模式的两个角色中,我们当前的角色为 被代理者,也就是浏览器这个角色。更重要的是,正向代理的本质是我们去请求外部的资源,如果以生产者、消费者模式来区分,我们属于消费者。

总结:

1、正向代理,我们的角色是 被代理者

2、正向代理,我们不对外提供服务,反而是对外消费服务,属于消费者

反向代理,很显然,就是和正向代理相反,如果说正向代理是男,那么反向代理就是女了,亲,此处不再纠结其他情况!下面我用一副图片解释下反向代理:

浅析Nginx 正向代理与反向代理

看完上面的图片,请你想象一下这么一个场景,假设你现在是某公司技术总监,你们公司需要对外提供一套web服务,那么你打算怎么做呢?

答案是可以通过反向代理来完成。通常你们公司拥有自己的IDC机房,机房通讯通常采用局域网交换机,internet网用户请求是无法直接访问到局域网内的web服务的,因此这个时候,你需要一台反向代理服务器来接收internet web请求,然后将请求分发到局域网中的不同主机上进行处理,处理完成之后再做出响应。因此,反向代理大概就是这么一个场景。请记住,反向代理中,我们的角色是 局域网 web服务。

总结:

1、反向代理,我们的角色是 局域网 web服务

2、反向代理,我们对外提供服务,属于服务提供者

2、nginx正向代理和反向代理实例解析
nginx在正向代理方面的应用非常地少,因此,对于正向代理的相关配置指令也不多,下面是一个nginx作为正向代理服务器的配置实例,配置仅供参考。

server {
resolver 192.168.1.1; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
解释下上面的指令,resolver配置DNS服务器的ip地址,可以配置多个。你可能会问,正向代理中为什么需要配置DNS服务器的ip地址呢?其实答案很简单,你想象下假如现在你的浏览器配置了正向代理服务器,你现在在浏览器中输入网页链接,根据正向代理原理,该url请求将会被正向代理服务器执行,问题来了,如果你的代理服务器不配置DNS解析服务,nginx怎么知道你这个oneSite.cn到底是个什么鬼,到底对应因特网的ip地址是什么?所以这就是需要配置resolver指令的原因所在。

listen指令配置nginx监听浏览器请求的端口号。

proxy_pass指令配置接收到被代理浏览器发来的请求之后,需要帮忙执行的请求是什么,$http_host$request_uri指明目的主机和uri,属于nginx变量,一般不需要修改。

nginx反向代理的相关配置如下,在这里小编搭建两个Spring boot小demo模拟上面反向代理的web服务,相关源代码可以在github获取。
浅析Nginx 正向代理与反向代理

demo工程启动端口号为8081,demo1工程启动端口为8082,对于所有的请求前缀带/demo的都将转发到demo工程进行处理,对于所有的请求前缀带/demo1的都将转发到demo1工程进行处理。

nginx配置如下:

server {
listen 80;
location /demo {
proxy_pass 网页链接
}
location /demo1 {
proxy_pass 网页链接
}
}
启动demo和demo1两个工程之后,浏览器输入下面地址:

浅析Nginx 正向代理与反向代理

浅析Nginx 正向代理与反向代理

可以看到,外部统一使用80端口访问服务时,nginx根据路径前缀进行代理,然后返回执行结果。对于nginx反向代理路径配置有几点需要注意,使用时要非常谨慎。

上面proxy_pass指令配置的url为网页链接,注意在该url后面不能使用/demo1后缀进行代替,否则就报错了。为什么呢?首先nginx会判断proxy_pass指令中配置的url地址是否包含uri,如果在proxy_pass指令中配置的url地址不包含uri,那么nginx将会使用请求路径的uri进行转发,如果在proxy_pass指令中配置的url地址包含uri,则nginx会忽略请求location中的uri,转而使用你在proxy_pass中配置的uri进行覆盖,转发,另外,/也是一种uri,哈哈,要特别小心哈~

举例子:

假设请求地址为:http://localhost/demo/getServerInfo.json,location配置为/demo,proxy_pass配置为http://xxxx:port,则会使用http://xxxx:port/demo/getServerInfo.json进行转发,结果正确。如果proxy_pass配置为http://xxxx:port/demo1,则会使用http://xxxx:port/demo1进行转发,因为/demo1覆盖了/demo

欢迎工作一到五年的Java工程师朋友们加入Java高级交流群:854630135

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

哦对了,喜欢就别忘了关注一下哦~

转载于:https://blog.51cto.com/13954634/2294223

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

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

相关文章

pycharm 安装 jupyter

jupyter可以像笔记一样,在学习和整理思路时很好。 使用的python是3.7.5版本 windows安装步骤: cmd 再修改下pip的源,选择国内,这样快。 国内pip源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 广东 豆瓣https://pypi…

或成为性能宠儿,荣耀8x Max 骁龙660版首销在即

今天已经是十一假期的最后一天了,假期马上就要结束了,虽然这有点让人遗憾,但是接下来的好消息让很多人的心情好了不少,那就是10月8日荣耀8x Max骁龙660版本就要在全平台开售了,这恐怕是节后最开心的事情了。此前&#…

读书笔记-说服力 让你的PPT会说话

说服力:让你的PPT会说话张志 包翔 刘俊前言优秀的幻灯片是内容和形式的完美统一,掌握配色排版特效的技术也很重要,不过对大部分人,这些基础操作都已经初步掌握了。要进一步提高,技术不是制作高水平PPT的主要障碍&#…

idea lombok 插件安装

下载了guns源代码,idea提示很多方法不存在。后来发现是没有安装 lombok 插件。 lombok让java代码更加简洁,具体介绍:https://www.cnblogs.com/heyonggang/p/8638374.html 安装: File---setting---plugins

怎么把pdf转换为html,如何将PDF转换成HTML网页格式呢?

原标题:如何将PDF转换成HTML网页格式呢?现在很多在校程序学生们时常在思考怎么对HTML网页进行编译以呈现出想要展现的内容。但是HTML犹如我们外语学习一样,一个网页有很多的HTML文件,超文本标记语言文件以.htm(磁盘操作系统DOS限制…

Epson C1100报错“Service Req E511”的处理方法

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/renyuansoft/blog/2231623

guns企业高级单体版(前后端不分离)运行启动

单体版分前后端分离与不分离,这里分享前后端不分离的搭建方法 访问guns官网https://www.stylefeng.cn,登录后可查看教程(账号密码见群公告) 官方教程不是最新的,有些地方写的不是很清楚 第一步 确认环境 JDK1.8 M…

华为手机应用鸿蒙os,华为手机内置应用逐渐向鸿蒙 OS 靠拢

IT 之家 3 月 21 日消息 华为在去年 12 月 16 日举行 HarmonyOS 2.0 手机开发者 Beta 活动。现场正式发布了 HarmonyOS 2.0 手机开发者 Beta 版本。同时,HarmonyOS 2.0 手机开发者 Beta 开启公测。华为表示,HarmonyOS 是面向万物互联时代的全场景分布式操…

分布式数据库中间件使用经验分享

最近公司新项目使用了华为云的DDM分布式数据库中间件服务,通过一段的时间的使用感觉还不错。近段时间发现有许多小伙伴也准备去使用这个服务,所以为大家分享一下使用 创建DDM服务的经验,帮助小伙伴们少走弯路。首先在使用创建DDM实例的时候小…

project设置6天工作制日历

1.新建工作日历,取名 2.在“工作周”选项里设置 主要用到的是“工作周” 在project标准日历里,星期一---星期五是有工作时间,8-12,13-17。星期六,星期日是没有工作时间的,即非工作日。只要设置工作时间,就…

html5播放器自动全屏,HTML5 video播放器全屏(fullScreen)实现的方法

这篇文章主要介绍了HTML5 video播放器全屏(fullScreen)方法实例,本文直接给出一个完整代码实例,需要的朋友可以参考下首先来说,这个标题具有误导性,但这样设置改标题也是主要因为video使用的比较多在html5中,全屏方法可以适用于很多html 元素…

阿里如何实现100%容器化镜像化?八年技术演进之路回顾(转)

本文系转载。可以参考文中的以下内容: 阿里的容器框架的演进路线;在大公司内部、跨多部门、并且已经有大量现有系统情况下的推广实施方案;框架设计的方法论、设计图纸等。八年时间,阿里集团实现了 100%内部容器化镜像化&#xff0…

project日历设置-大小周交替

关键点是用到日历中的“例外日期”的重复周期功能 效果 2020年1月 1月19日是 2020年春节调休,要上班,工作日 2020年2月 2月1日是2020年春节放假,不上班,非工作日

Axure元件库:ElementUI元件、蚂蚁金服元件

2022年12月31日更新 ant design 已更新到5.x版本,目前官网还没提供 axure的元件库,下文的入口官网已取消,资源可关注我的微信公众号,输入:axure,获取以下元件库,免费,祝设计愉快&am…

c++new时赋初值_优质 quot;嵌入式C编程quot; 必备指南

来自公众号 : 嵌入式ARM整理:bug菌1、聊一聊本文是bug菌为大家整理的好文,C语言其实是非常简洁的语言,语法相比那些高级语言可以说非常小巧了,然而C语言在嵌入式中却有着其独特的魅力,本文为大家展示了C语言在嵌入式中…

二手交易平台html代码,二手物品交易HTML5模板

二手物品交易HTML5模板资源下载此资源下载价格为4D币,请先登录资源文件列表codedown123-0820-18/about.html , 9117codedown123-0820-18/contact.html , 8364codedown123-0820-18/css/app.css , 115913codedown123-0820-18/img/accountcover.jpg , 74024codedown123…

浏览器安装Axure插件与配置

Axure发布到本地的html包,打开需要Axure插件。 chrome浏览器安装插件需要翻墙或者导入下载好的插件文件,不是太方便。国内的360极速,qq浏览器的应用扩展不需要翻墙,可以直接搜索安装。下面演示360极速浏览器的Axure插件安装与配置…

matlab 滤波器设计 coe_一种半带滤波器的低功耗实现方法

在如今数字技术中,半带滤波器因其通带阻带对称,系数具有偶对称性且滤波器阶数为奇数,有效系数少等特点广泛应用于通信、视频处理、语音识别等数字信号处理应用中,尤其常用于实现信号的2倍抽取。对于一个阶数为N(N为偶数)&#xff…

产品设计:APP个人信息保护指引

需求分析 2019年11月4日,工业和信息化部展开APP侵犯用户权益专项整治行动。即日起各安卓应用市场根据最新的规则审核市场里的各应用,审核不通过将下架处理。 调研了“手机qq”、“抖音”、“快手”、“今日头条”、“澎湃新闻”等APP&#xff0…

说说GIL

上一篇:线程深入篇引入 Code:https://github.com/lotapp/BaseCode/tree/master/python/5.concurrent/Thread/3.GIL 说说GIL 尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的,所以这时候…