浅析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…

android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow

Does it support java 8 yet?Eclipse is displaying this as a problem, surely it does support 8 by now? In the release notes for revision 23.6 it says java 7 or higher, does this mean java 8 is included or? Wish theyd be more specific about such details. A…

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

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

绩效考核编写说明

第一步: 请大家从群文件下载自己的考核表,该表格是季度初填写的,与实际进度安排有偏差,需要调整(见第三步) 第二步: 请大家从群文件下载部门考核表,如第四季度该文件名“【预评分】…

android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?

在回答您的问题之前&#xff0c;我强烈建议您查看ExecutorServices&#xff0c;例如ThreadPoolExecutor。现在回答你的问题&#xff1a;如果要等待上一个线程完成&#xff0c;在开始下一步之前&#xff0c;您可以在之间添加thread.join()&#xff1a;for(int i 0; i < 10; …

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

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

无法访问com.sun.beans.introspect.PropertyInfo

idea在install或者package项目的时候报错&#xff1a;无法访问com.sun.beans.introspect.PropertyInfo 原因是&#xff1a;idea编译该项目的jdk不是1.8 修复方法&#xff1a; idea---file---project structure 把本地安装的jdk1.8配置上 再运行问题解决

idea lombok 插件安装

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

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

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

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

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

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

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

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

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

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

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

project设置6天工作制日历

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

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

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

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

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

project日历设置-大小周交替

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

html 提交后跳转页面,html 提交后跳转页面

$(function () {$.ajax({url: jsondata.ashx,type: GET,dataType: json,timeout: 1000,cache: false,beforeSend: LoadFunction, //加载执行方法error: erryFunction, //错误执行方法success: succFunction //成功执行方法})function LoadFunction() {$("#list").htm…

vue打包后出现一些map文件的解决方法

Vue打包后出现一些map文件的解决办法&#xff1a; 问题&#xff1a; 可能很多人在做vue项目打包&#xff0c;打包之后js中&#xff0c;会自动生成一些map文件&#xff0c;那我们怎么把它去掉不要呢&#xff1f; 1、运行 cnpm run build 开始打包 2、会在项目目录下自动创建di…

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

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