Nginx基本概念
定义
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名
Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是在BSD-like 协议下发行。其特点是占有内存小
,并发能力强
,事实上Nginx的并发能力在同类型的网页服务器中表现较好
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,支持高达50000个并发连接数
反向代理
正向代理
定义
一般的访问流程是客户端直接访向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,并指定目标服务器(原始服务器)然后有代理服务器和原始服务器通信,转交请求并获得内容,再返回给客户端。正向代理隐藏了真实的客户端
,为客户端收发请求,使真实客户端对服务器不可见
举例:浏览器无法访问谷歌,这时候可以通过一个代理服务器来帮助你访问谷歌,这个服务器就叫正向代理
反向代理
定义
与一般流程相比,使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。反向代理隐藏了真实的服务器,为服务器收发请求,使真实的服务器对客户端不可见,一般在处理跨域请求的时候比较常用
举例:饭店吃饭,可以点川菜、粤菜、江浙菜,饭店也分别有三个菜系的厨师 👨🍳,但是你作为顾客不用管哪个厨师给你做的菜,只用点菜即可,小二将你菜单中的菜分配给不同的厨师来具体处理,那么这个小二就是反向代理服务器
简单来说,一般给客户端做代理的都是正向代理,给服务器做代理的就是反向代理
使用反向代理的优点
反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的
中间层
。这对于安全方面来说是很好的,特别是当您使用web托管服务时
负载均衡
一般情况下,客户端发送多个请求到服务器,服务器处理请求,其中一部分可能要操作一些资源比如数据库、静态资源等,服务器处理完毕后,再将结果返给客户端
这种模式对于早起的系统来说,功能要求不复杂,且并发请求相对较少的情况下还能胜任,成本也低。随着信息数量不断增长,访问量和数据量飞速增长,以及系统业务复杂度持续增加,这种做法已无法满足要求,并发量特别大时,服务器容易崩
请求爆发式增长的情况下,单个机器性能再强劲也无法满足要求了,这个时候集群的概念产生了,单个服务器解决不了的问题,可以使用多个服务器,然后将请求分发到各个服务器上,将负载分发到不同的服务器上,这就是负载均衡,核心是「分摊压力」。Nginx 实现负载均衡,一般来说指的是将请求转发给服务器集群
负载均衡算法怎么实现的
为了避免服务器崩溃,通过负载均衡的方式来分担服务器的压力,将多态服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力刚小的服务器
负载均衡策略
轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统
upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
权重
- weight的值越大分配
- 到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
upstream myserver {
server 127.0.0.1:8080 weight=8;
server 127.0.0.1:8081 weight=2;
}
- 权重越高,在被访问的概率越大,如上例,分别是20%,80%。
ip_hash(IP绑定)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器
,并且可以有效解决动态网页存在的session共享问题
upstream myserver {
ip_hash
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
fair(第三方插件)
- 必须安装upstream_fair模块
- 对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,
响应时间短的优先分配
- 哪个服务器的响应速度快,就将请求分配到那个服务器上
upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
fair
}
url_hash(第三方插件)
- 必须安装Nginx的hash软件包
- 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率
动静分离
为了加快网站的解析度,可以吧动态页面和静态页面由不同的服务器来解析
,加快解析速度,降低原来单个服务器的压力
一般来说,都需要将动态资源和静态资源分开,由于Nginx的高并发和静态资源缓存等特性,经常将静态资源部署在Nginx上,如果请求的是静态资源,直接到静态资源目录获取资源,如果是动态资源的请求,则利用反向代理的原理,把请求转发给对应后台应用去处理,从而实现动静分离
使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。
Nginx的优缺点
优点
- 占用内存小,可以实现高并发连接,处理响应快
- 可实现http服务器、虚拟主机、方向代理、负载均衡
- Nginx配置简单
- 可以不暴露真正的服务器IP地址
缺点
动态处理差:Nginx处理静态文件好,耗费内存少,但是处理动态页面很慢,现在一般前端用nginx作为反向代理抗住压力
应用场景
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器
- 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况
- nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截
Nginx安装、常用命令及配置文件
Nginx安装
yum无法安装,缺少rpm包
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
然后使用yum安装
yum list | grep nginx