Nginx_反向代理、负载均衡

一、Nginx目录说明

在这里插入图片描述
conf:配置文件
html:静态文件
logs:日志文件
sbin:命令(包括启动、停止等命令)

Nginx的启动和停止:

启动:进入/usr/nginx/sbin目录下执行./nginx
在这里插入图片描述
查看是否启动成功,使用默认80端口访问即可:
在这里插入图片描述
停止:./nginx -s stop
在这里插入图片描述

刷新nginx:./nginx -s reload
(当修改了conf目录中的配置文件之后要刷新nginx。)

二、Nginx基础配置详解

关于nginx的配置主要是在/conf/nginx.conf文件中。

1、配置操作配置文件的权限:只允许root用户操作nginx.conf
在这里插入图片描述
2、nginx默认监听的端口号
在这里插入图片描述
3、server节点解析
在这里插入图片描述
我们可以通过自定义server节点,来完成监听某个端口的访问然后跳转到对应的页面中。
listen:表示监听的端口号
server_name:默认的本地路径
location /{}:表示默认的跳转情况,在"/"的位置可以使用正则表达式进行匹配
root:表示匹配的页面的根目录
index:表示默认匹配的页面

如上,截图中的server节点配置表示:
当使用80端口访问的时候,如果端口后不指定任何的文件,则默认访问html目录下的index.html页面。

如上所述,我们也可以通过相同的配置,使得浏览器通过对应的端口号就可以直接访问对应的页面。

同时,当多个server监听的端口号相同的时候,nginx会通过访问的server_name域名来进行分配。意思就是,哪怕是端口相同也不会出现端口号冲突的问题,只需要根据不同的域名就可以映射到不同的页面。

三、反向代理和负载均衡

1、正向代理

拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他。然后A就通过B向C借钱,B借到钱之后再转交给A。在此过程中B就扮演了一个正向代理的角色,真正借钱的人C是不知道的。
我们通常所接触到的代理都是正向代理,正向代理过程中,它隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。
比如,通常情况下我们想要访问www. google.com是访问不到的,想要翻过这堵墙,就需要在国外来设置一台代理服务器。你访问这台代理服务器,然后代理服务器帮助你访问谷歌的网站。此代理服务器就是常说的VPN。

2、反向代理

还是借钱的例子,A向C借钱,然后C借给他了。但是实际上这个钱是C向B借的,至于钱真正是谁的,A是不知道的。在此过程中C就扮演了反向代理的角色,客户端不知道真正提供服务的服务端是谁。
反向代理隐藏了真正的服务端,当我们访问www.baidu.com的时候,背后可能有成千上万台服务器在为我们服务。我们不需要关心到底是哪一台服务器为我们提供服务,我们只需要知道谁是反向代理服务器即可。

3、负载均衡

网站的访问量越来越大,服务器的服务模式也得进行相应的升级。比如单独分离出数据库服务器、图片服务器等等,这些是简单的数据的负载均衡。而面对大量的来自web的请求,如何将同一个域名的访问分散到两台或更多的服务器上呢?这就是另外一种负载均衡了, nginx自身就可以做到,只需要做简单的配置就可以了。
nginx不仅可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面分离,可以按照轮询,ip哈希,url哈希,权重等多种方式对后端服务器进行负载均衡,同时还支持后端服务器的健康检查。

nginx负载均衡算法简单描述:
轮询(默认):针对每个Http请求的时间来轮流分配不同的服务器。
ip哈希:针对请求的ip地址来将不同ip的访问进行不同服务器的分配。
权重:每个服务器的权重概率不同,意思是说每个服务器处理请求的概率是不同的,会在多个服务器之间按照概率对应的频率来进行请求的处理。

四、反向代理和负载均衡配置示例

1、准备三个tomcat:
在这里插入图片描述
复制并改名准备了三个一样的tomcat,并且在三个tomcat的默认页面中做了标识,以显示负载均衡连接不同服务器的效果。

2、修改tomcat2、tomcat3的默认端口,使tomcat2的默认端口在默认数值8080的基础上加10,tomcat3加20,用来使得三个服务器同时运行。

使用vim tomcat2/conf/server.xml命令进入配置文件进行修改:
在这里插入图片描述
(需要修改的端口位置有五处。)

3、启动三个tomcat,并测试访问
在这里插入图片描述

4、修改nginx中conf目录中的nginx.conf文件完成负载均衡配置
在这里插入图片描述

5、修改windows主机的hosts文件使nginx.conf中server_name自定义的域名生效。
hosrs文件路径:C:\Windows\System32\drivers\etc
在这里插入图片描述
(使得自定义域名与nginx服务器所在的虚拟机ip地址一一对应上。)
在现实生活中,我们通过网站的域名去访问网站,浏览器首先会查找windows之中的housts文件,查询是否有存在与域名对应的ip地址。如果没有则去访问实现了反向代理概念的域名服务器,查找对应的ip。我们在此实现的自定义域名只能在本机上进行访问。

6、负载均衡配置完成,刷新nginx并启动,查看效果。

至此,nginx的负载均衡配置就已完成,采用的是默认的轮询算法进行负载均衡。除此之外,以下是权重算法和ip哈希算法的相关配置:

权重算法实现负载均衡:
在这里插入图片描述
ip哈希算法实现负载均衡:
在这里插入图片描述
补充:关于负载均衡出现的多服务器之间的Session数据无法共享问题的解决方案

例如当使用轮询和权重算法进行负载均衡的时候,就会出现一个问题。假如网页的登录界面是有验证码的,并且是将生成的验证码保存在服务器的Session中进行验证的。此时,如果加载页面的请求和加载验证码的请求不在同一个服务器中时,当进行登录验证的时候就无法获取到另外一个服务器中的Session数据来进行对比。

此时,可用如下方法进行解决:

  • 使用ip哈希算法进行负载均衡:使用ip哈希的配置之后,同一个ip发出的请求就会访问同一台服务器,此时就不会出现Session保存在另外一台服务器的问题。
  • 将验证码数据存放到redis中
  • 将验证码数据存放到Cookie中:Cookie是在客户端进行短时间的存储,但是不安全,并且有可能用户的浏览器设置了禁止Cookie保存,所以不推荐。
  • 存放到mysql数据库中:此方法可以将验证属于持久化存储到数据库中,不过会增加程序对数据库的读取访问,不推荐使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值