前言
说到nginx使用过的都基本有个大概了解,很多公司的使用也基本就是反向代理、负载均衡、动静分离、还有就是正向代理这几种,当然还有防盗链等。具体nginx是什么呢?其实网上已经有很多相关的资料了,是一个高性能的http和反向代理的web服务器,并且是轻量级的,部署方便,使用简单易懂。
正文nginx常用的几种策略简介
反向代理:反向代理也是我们在面试过程中经常被问到的内容,那么nginx的实现就是典型的反向代理,nginx本身作为一个反向代理的服务器,当internet发送请求后到nginx这个代理服务器,然后由nginx将接收到的信息发送给内部网络服务器,由内部网络服务器再将信息通过反向代理服务器回送给发送方,这个过程中nginx就是一个反向代理的服务器。
反向代理有什么作用:顾名思义。通过上述可以轻松的看出这个过程中请求方是没有直接和内存网络打交道呢,什么意思呢,就是一般公司为了项目的安全性,是不允许外网直接访问内部的服务器网络的,所以安全性是反代的第一个优势,还有就是负载均衡策略,这个可以减轻服务器压力起到分发请求的作用。
正向代理:说了反向代理,这里也就大概说下正向代理吧。要说正向代理其实很反向代理类似,当很多客户想代理服务器发送请求时,正向代理是将很多用户的请求接收后向一台服务器发送而反向代理是将很多用户的请求发送给目标服务器(代理服务器)后将数据推送到各个服务器,并将数据送回的过程,看下面的图可清楚表示。
图片来源于网络
从上图可以看出正向代理是客户端向代理服务器请求由代理服务器统一拿回数据后给客户端的过程,二反向代理是客户端向目标代理服务器发送请求,由代理服务器分发给关联的内部网服务器,再由其一一返回。本质区别就是暴露在外的一个是服务器,一个是客户端。
负载均衡:负载均衡在nginx的使用过程中也是比较常用的,所谓负载均衡,就是将客户端发送的请求通过其算法策略合理的分配给相关的服务器,然后由服务器统一返回。从而避免所有的访问挤压到一台服务器。
算法策略有哪些呢?其实网上有很多,这里简单说下
默认轮询策略:nginx的默认策略为轮询策略,也就是访问的请求会依次分发给后台各个服务器,如果在后台服务器性能都相同的情况下,可以使用默认策略,当然如果其中一台服务器挂掉的话,也可以自动剔除,继续其他服务器的请求。
权重策略(weight):权重策略就是在轮询的基础上,加上每台主机的权重,也就是主机请求的比率,可以给性能好的主机比率高点,差的地点,比如物理机可以增加比率,而虚拟机可以减少比率等。
IP_Hash(ip方式分配):此方式就是根据请求的ip去分发,所有请求的相同ip都会被分配到固定服务器,此方式虽然可以解决session问题,但如果是内网的网段都用的一个网络,此时就会出现请求发送到一台主机的情况,所以本质上讲,还是没有解决session共享问题。至于session共享有兴趣的可以去研究一下,这里就先不描述了。
第三方(url_hash和fair)策略:使用此方式需要部署相关的插件才可以使用,而且插件是第三方公司开发的,很难保漏洞和升级的相关问题,所以很多公司还是拒绝是用这种策略的。有兴趣的可以深入研究一下。
nginx配置文件模块作用简介
图片来源于网络
从上图可以看出nginx的配置文件的各个模块,图片懒得设计,姑且先用别人的说下。
全局模块:可以看出是用来存放用户组和pid的路径以及错误日志的配置路径信息,这块一般都是默认配置,无需修改。
event模块:该模块配置的是最大连接数和网络连接的相关配合,多数情况下默认即可。
http模块:这个模块里面包含的内容就比较多了,也是在nginx使用过程中比较常用的也是很重要的模块了,比如连接时间和传输类型等信息。
server模块:配置请求的监听端口,错误页面以及虚机的配置。
location模块:请求目录的配置,也就是访问的url等。
当然还有其他的模块信息,比如动静分离的信息配置模块,包括nginx的防盗链的配置等,另外关于nginx的先关详细内容还有很多,这里只是将本人见到和使用过的理解下了出来,有兴趣的可以参与讨论。
结语:nginx作为开源的反代工具,很多公司也对其进行了改造,将其变的更加其强大,比如阿里使用的tengine就是在其基础上的改造,里面也添加了很多的支持。
欢迎关注竹韵谈科技公众号,一起参与讨论和学习