nginx01_nginx的原理和简介代理是一种思想是一种实现集群的方式代理[解决高并发]:正向代理反向代理的理解项目打包

Posted 平凡加班狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx01_nginx的原理和简介代理是一种思想是一种实现集群的方式代理[解决高并发]:正向代理反向代理的理解项目打包相关的知识,希望对你有一定的参考价值。

系列文章目录

前言






Tomcat最大支持的并发数是2000,那么问题来了,如果同时有4000的用户并发量,这个时候咋办
像淘宝、京东的双十一双十二,一秒钟的用户并发量远远不止两三千
所以这时候是怎么处理的呢,他们远远不止一台服务器
也就是说远远不止一个Tomcat

这里又涉及到一个分流问题,我们怎么就让客户端1-2000号就访问第一台服务器呢?
这个是分流的知识,我们先不管
我们考虑另外一个问题
如果有多台服务器,那么他们的ip地址是不是不一样,是的,ip地址不一样
我们这个时候就需要一个人来帮我们做事情
这个人就叫代理
代理他们记住我们上面那三台集群的电脑的ip地址
然后我们所有的客户端都去访问代理,而这个代理自动的给我们分配某个用户访问哪个服务器
所以代理其实是实现集群的一种方式,可以解决高并发的问题
实操
一个电脑上安装多个Tomcat(因为安装多个Linux比较复杂)
假如我们是安装两个Tomcat,我们需要注意这两个Tomcat不能端口号一致
我们看下面的 3.window配置nginx+tomcat集群

1、nginx是什么?

代理实际上是一种思想
集群,意思就是多台服务器

2.代理和反向代理、透明代理

正向代理(Forward Proxy)

1、访问本无法访问的服务器B,如下图


2、加速访问服务器B

这种说法目前不像以前那么流行了,主要是带宽流量的飞速发展。早期的正向代理中,很多人使用正向代理就是提速。还是如图1.2 假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理服务器Z,从代理服务器Z到服务器B都是高带宽链路。那么很显然就可以加速访问服务器B了。

3、Cache作用

Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。还如上图所示,如果在用户A访问服务器B某数据J之前,已经有人通过代理服务器Z访问过服务器B上得数据J,那么代理服务器Z会把数据J保存一段时间,如果有人正好取该数据J,那么代理服务器Z不再访问服务器B,而把缓存的数据J直接发给用户A。这一技术在Cache中术语就叫Cache命中。如果有更多的像用户A的用户来访问代理服务器Z,那么这些用户都可以直接从代理服务器Z中取得数据J,而不用千里迢迢的去服务器B下载数据了。

4、客户端访问授权

这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER做为正向代理服务器来授权用户是否有权限访问互联网,挼下图1.3

5、隐藏访问者的行踪

如下图1.4 我们可以看出服务器B并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器B进行交互。如果代理服务器Z被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼

反向代理(reverse proxy)

1、保护和隐藏原始资源服务器

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。 使用反向代理服务器的作用如下:

2、负载均衡

透明代理

如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了 。
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。 透明代理实践的例子就是时下很多公司使用的行为管理软件。如下图3.1

3.window配置nginx+tomcat集群

实操:一个电脑上安装多个Tomcat

一个电脑上安装多个Tomcat(因为安装多个Linux比较复杂)
假如我们是安装两个Tomcat,我们需要注意这两个Tomcat不能端口号一致
我们看下面的

3.1在一台电脑上安装两个tomcat




当然实际上是可以在eclipse或者idea里面改端口号的,但是集群的时候一般直接在配置文件里面改,这样比较快
需要注意的是,这个配置文件下面一共是有三个端口的

原端口号分别是 8005、8080、8009
我们需要把这三个端口都改一下
最简单的办法是 把这三个端口号都加1,就行了,一般来说,没有啥问题
修改完成之后,我们来创建一个web项目
我们这个web项目也很简单,就让它显示一个session就行了



Tomcat最好选择对应的版本,这样比较不容易出现报错,也符合逻辑



替换一次字符,否则不能输入中文,比较麻烦。容易乱码等一系列问题


浏览器跟服务器进行访问的时候会创建一个session
为了以后方便,我们可以直接把这个项目改成Utf-8的,这样以后新建jsp什么的默认就是UTF-8的了


如果这样设置没有用,我测试了,设置完之后,新基jsp页面默认还是ISO-8859-1字符,而不是UTF-8 真的没用,那么我们就点击项目来设置吧,不设置全局了




如果没有用那就自己改一下吧
下面看看效果

然后直接打包

打包——打包成war包




war包导出来之后我们继续做什么呢,我们把它丢到集群里面去

分别放到Tomcat的这个目录

然后分别启动8080和8081的Tomcat


然后我们就会发现,两个Tomcat都能够启动同一个项目,只是他们的端口不一样,因为端口一样是不能在同一台电脑运行的

改一下项目

那么,问题来了
我们给别人用的时候肯定不能给两个地址给别人,因为他也不知道哪个并发多哪个并发少
所以这时候代理就显得非常重要了
那我们怎么做呢
怎么让代理去决定访问哪一台服务器或者访问哪个地址

怎么让代理去决定访问哪一台服务器或者访问哪个地址

所以我们看图,我们不应该直接去访问服务器,而是直接去访问代理,然后由代理去负责访问哪台服务器

安装的时候注意,有专门给windows用的和专门给Linux用的版本,不要搞错,这个很好理解我们安卓手机下载app的时候也有很多版本,有安卓版(.app)window版(.exe)还有苹果的ISO版本


所以nginx也是一样的,我们需要安装对应的版本


安装之前,我们需要配置一下,为什么需要配置呢
这是因为我们需要让nginx知道它下面有哪些集群。这样它才能够去自动的选择一个Tomcat去给你启动程序


需要注意的是,我们这个nginx的端口号,默认是80,是否会有冲突
比如,我们的SVN的服务器默认端口也是80
那么解决办法是什么呢,很简单,要么就是卸载掉SVN的服务端,要么就是把SVN服务端的服务停掉


注意:端口被占用了是打不开的
默认端口号要是被占用了,可以改成81
参考文档:https://blog.csdn.net/weixin_41485724/article/details/104794342添加链接描述


输入localhost 如果改了端口为81就输入 localhost:81


出现这个,就说明我们的代理服务器部署成功了

下面我们就应该让代理服务器 nginx去知道,他下面有哪些服务器



我们在server上加一段如下两段代码


注意如果这个页面启动不成功,可能是配置不对,再改一下配置试试

有几个就配置几个网址
配置完成之后,需要重启代理服务器
在windows里面重启nginx很简单,先把之前的关了

正常来讲是两个,不是上面那样有4个,4个的原因可能是端口80没改的时候运行了一下81的时候又运行了一下
正常配置之后,再启动代理服务器,是进入到这个默认页面

再瞄一眼,我实测成功的的配置文件

然后就很简单,可以测试了


代理自动决定帮我们访问哪个服务器
很简单
nginx会自动分流,它里面有一个分流机制
至于是什么分流机制,我们不用去深入的研究它
还有一个问题
如果是同一个浏览器,按道理他们的sessionID要一样才对
如果不一样就一定会有问题
我们就没有办法去判断用户是否登录了,每刷新一下次都需要用户重新登录,就会出现大bug
而我们现在,正是存在这个问题,两个服务器的sessionID不一样

怎么让同一个服务器的sessionID一样

1.一种解决办法:一个用户进来以后只在tomcat1上进行操作,另一个用户进行只在tomcat2上进行操作.

2.session的共享
一种使用tomcat广播机制完成session的共享(不推荐的方式)
一种使用redis服务器的方式完成session的共享(推荐的方式)
下面说一下,不推荐的方式,假如没有学习redis的时候,或者redis出了问题,情况紧急的时候可以当做备用的方式
tomcat广播机制完成session的共享
修改配置文件前,先把两个Tomcat停了再修改

关掉之后
我们再来打开Tomcat的配置文件

ctrl+f 查找 Cluster 我们发现默认集群是关闭的(被注释了)

取消掉注释,然后关掉继续 在web-app里面也要加个配置:配置一个



另外一个Tomcat也是一样的配置
全部完成之后,重启Tomcat服务器即可实现
下面再看看完整的操作

实测,确实可以实现同一个浏览器,sessionID可以保持一致!!!


以上是关于nginx01_nginx的原理和简介代理是一种思想是一种实现集群的方式代理[解决高并发]:正向代理反向代理的理解项目打包的主要内容,如果未能解决你的问题,请参考以下文章

lamp架构nginx简介及源码安装常用命令

Nginx 反向代理工作原理简介与配置详解

linux学习:Nginx--简介与安装-01

nginx 01-Nginx简介

Nginx

一文看懂Nginx正向/反向代理原理及应用场景!