本文主要记录个人在学习Nginx时的一些总结,本文会持续更新,不断地扩充
本文仅为记录学习轨迹,如有侵权,联系删除
注意:这里不讲Nginx环境的安装,另外里面还需要用到docker的相关知识,因为是基于docker进行的Nginx学习,这里直接上Nginx的核心知识点,如需要安装环境可以看一下菜鸟学习Docker实例,里面有记录如何搭建Nginx的环境
说到反向代理就必须要了解正向代理,什么是正向代理,举个例子,我们在国内访问谷歌是访问不到的,于是我们可以借助谷歌助手,谷歌助手将访问的谷歌资源返回给我们就是一个类似的正向代理,谷歌助手就是一个代理
反向代理跟正向代理有点类似,都是代理,但是却有些不同,举个例子,你打电话需要人工服务,拨通了10086后,10086那边就会给你接一个空闲的客服过来询问你的需求,这就是类似的反向代理,10086理解为代理,它会通过自己的算法给你接一个空闲的客服过来,至于是那个客服你是不知道的。
先模拟几个站点,真实中应该是几个服务器,并且保证可以访问
下面要实现的功能是通过访问nginx服务器,通过它(反向代理)来访问上面两个站点,首先docker运行一个nginx镜像实例,这里的端口号是81
docker run --name nginx01 -d -p 81:80 -v $PWD/nginx/html:/usr/share/nginx/html -v $PWD/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/nginx/logs:/var/log/nginx -v $PWD/nginx/conf.d:/etc/nginx/conf.d -d nginx
上面的命令简单说一下就是运行了一个实例,叫nginx01,并且做了数据挂载,主要修改的配置是"$PWD/nginx/conf.d"里面挂载的default.conf配置文件,具体的解释可以看一下菜鸟学习Docker实例,这里就不再细讲
开始进行相应的配置
完之后就可以直接访问了,注意,这里访问nginx01这个站点即可访问到一开始说到的那两个站点
反向代理成功!
如图,当有请求进来时,负载均衡服务器会根据设置好的负载均衡策略,决定将请求分配给那一台服务器
轮询:这是默认的策略,将客户端发起的请求平均的分发给服务器
首先准备两个站点,两个站点的url基本一样,只是服务器或端口号有区别,如下,均可以访问
配置文件如下
访问路径:http://39.96.22.34:81/test/a.html,由于上面提到的两个站点的url一样,服务器或端口号不同,并且,访问路径包含/test/,所以反向代理会执行均衡策略
这种均衡策略主要用于不同服务器的性能不一样的情况,假设两台服务器一个台的计算能力是10,一台的计算能力是2,这种情况下用默认的轮询的方式就不合适了,于是就有了权重的方式来进行负载均衡
在上面的例子的基础之上增加一些配置,如下
如上图,这样的情况下,如果有6个请求,则有5个会被分配到服务器1,1个分配服务器2,即按照权重的比例来分配请求。
这种均衡策略就是根据ip来进行请求的分配,第一次访问分配到了服务器1,那么下一次同一个ip访问时,会被分配到上次绑定的服务器1
配置方式也简单,如下图
用同一ip访问,结果所有的请求都分配到第一次访问的服务器那里
由于第一次分配的是服务器2,所以之后同一个ip访问都只会分配给服务器2。
什么是动静分离,根据上面的学习,我们通过Nginx代理的方式访问服务器,Nginx得去跟目标服务器进行连接,然后把目标服务器的资源返回给代理服务器,再给到客户端,这一次过程进行了4次连接,如下图
上面请求的是动态资源,而如果是静态资源,则完全可以存放在代理服务器里面,这样访问静态资源只需要连接两次即可,提高性能,如下图
要实现动静分离,由于这里是采用的docker的方式,所以需要将静态资源先挂载进容器里面,这里需要注意一点,挂载数据的时候可以将外面的文件挂载进容器,尽管容器里面不存在该文件
新建一个镜像实例nginx02,创建的时候将需要的静态资源挂载进容器
docker run --name nginx02 -d -p 82:80 -v $PWD/nginx/img:/data/img -v $PWD/nginx/html:/usr/share/nginx/html -v $PWD/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/nginx/logs:/var/log/nginx -v $PWD/nginx/conf.d:/etc/nginx/conf.d -d nginx
注意挂载静态资源的命令:-v $PWD/nginx/img:/data/img
启动容器,访问:http://39.96.22.34:82/img/
访问http://39.96.22.34:82/img/1.jpg
这样就实现了静态资源的访问,以后静态资源包括css和js等都可以用这种方式进行动静分离