文章最初发表于公众号:程序员周先森。本平台不定期更新,喜欢我的文章,请关注我的微信公众号。Nginx是一种类似于Apache的WEB服务器。基于REST架构风格,以统一资源描述符URI或统一资源定位符URL为通信基础,通过HTTP协议提供各种网络服务。但是,这些服务器在设计之初就受到用户规模、网络带宽、产品特性等方面的限制,定位和发展方向各不相同。这也使得每个WEB服务器都有自己鲜明的特点。Apache的发展周期很长,它有很多优点:稳定、开源、跨平台等等。所以设计成一个重量级的WEB服务器,但是不支持高并发。在Apache上并发访问会导致服务器消耗大量内存。操作系统在进程或线程之间的切换也会消耗大量的CPU资源,导致HTTP请求的平均响应速度下降。这时,轻量级高并发服务器Nginx应运而生。为什么Nginx在网络上流行?正是因为Nginx的几个显着特性的存在:Nginx采用了事件驱动的架构,这使得它能够支持百万级的TCP连接。时代~)Nginx是一个跨平台的服务器,可以运行在Linux、Windows、FreeBSD、Solaris、AIX、MacOS等操作系统上。这些优秀的设计所带来的巨大稳定性是众所周知的。Nginx是一个免费、开源、高性能的HTTP服务器和反向代理服务器;它还是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为网站发布处理的HTTP服务器,Nginx可以作为负载均衡实现的反向代理。说到代理,分为正向代理和反向代理。正向代理正向代理也是大家最常接触到的代理模式,那么正向代理到底是什么?我们都知道谷歌在国内是不能正常访问的,但是有时候我们因为技术问题需要访问谷歌的时候,我们会先找一个可以访问谷歌的代理服务器,我们将请求发送到代理服务器,代理服务器会访问谷歌,然后将访问的数据返回给我们,这个过程就是一个正向代理。正向代理的特点正向代理最大的特点就是客户端需要知道要访问的服务器地址。Google服务器只知道请求来自哪个代理服务器,而不知道具体是哪个客户端。正向代理可以隐藏真正的客户端特定信息。客户端必须设置转发代理服务器,需要知道转发代理服务器的IP地址和代理程序的端口。一句话,forwardproxy代理就是客户端,是客户端和谷歌服务器之间的一个服务器。为了从谷歌服务器获取数据,客户端向代理服务器发送请求并指定目标(谷歌服务器)。然后代理将请求转发给源服务器,并将获得的数据返回给客户端。正向代理的使用:访问国外无法访问的网站进行缓存,加速访问资源,授权客户端访问,在互联网上进行认证。代理可以记录用户访问记录(上网行为管理),对外界隐藏用户信息。对于代理,我们来看看什么叫反向代理。如果我们网站每天的访问量达到一定的限度,单台服务器是远远不能满足我们日常需求的。这个时候我们首先会想到分布式部署。通过部署多台服务器来解决限制访问量的问题,其实我们的大部分功能都是通过Nginx反向代理来实现的。我们可以看下图:反向代理的特点我们可以清楚的看到,多个客户端向服务器发送请求。Nginx服务器收到请求后,按照一定的规则转发给不同的服务器进行业务逻辑处理。这个时候确定了请求来自哪个客户端,但是并不清楚请求是由哪个服务器处理的。Nginx扮演着反向代理的角色。可以这样理解,反向代理对外是透明的,访问者不知道自己访问的是一个代理。反向代理代理就是服务器,主要用于服务器集群分布式部署的情况。反向代理隐藏了服务器的信息。反向代理的使用:为了保证内网的安全,通常使用反向代理作为公网访问地址,web服务器作为内网的负载均衡,反向代理服务器用来优化负载网站。正向代理和反向代理的区别在于,在正向代理中,隐藏了请求源的客户端信息;在反向代理中,隐藏了请求具体处理的服务器信息;既然负载均衡Nginx起到了反向代理的作用,那么它遵循什么规则呢?请求分发呢?分配规则是否可控?将负载按照一定的规则分配到不同的服务器上进行处理的规则就是一种均衡规则。将服务器收到的请求按照规则进行分配的过程称为负载均衡。Nginx支持的负载均衡调度算法如下:权重轮询(默认):将接收到的请求按照请求的先后顺序,一一分配给不同的后端服务器。如果一个服务器在使用过程中崩溃了,Nginx会自动将该服务器从队列中移除,请求接受状态不会受到任何影响。这样就可以为不同的后端服务器设置一个权重值。权重数据越大,服务器将分配给请求的概率就越大。ip_hash:每个请求根据发起客户端IP的哈希结果进行匹配。使用此算法,具有固定IP地址的客户端将始终访问同一台后端服务器。公平:智能调整调度算法,根据后端服务器的请求响应时间动态均衡分配。响应时间短、处理效率高的服务器被分配请求的概率高,响应时间长、处理效率低的服务器被分配的请求少。url_hash:根据访问的url的哈希结果分配请求。每个请求的url都会指向后端固定的服务器,这样可以提高Nginx作为静态服务器时的缓存效率。注意:Nginx默认不支持公平算法。如果要使用这种调度算法,需要安装upstream_fair模块。Nginx默认不支持url_hash调度算法。要使用它,您需要安装Nginx哈希包。作为一个Nginx的用户,在写配置文件的时候肯定有过问题,可能经常会花很多时间写配置文件。那么接下来顺便介绍一个在线快速生成Nginx配置文件的网站:https://nginxconfig.io/这个网站支持http,https,php,python,Node,cache,log,等,并可以生成Nginx在线配置文件。并且使用方法极其简单,只需要在网站中填写相应的需求,一键生成配置文件即可。参数说明:Domain:绑定的域名Path:根目录所在位置Documentroot:根目录下的实际项目名称Redirectsubdomains:如果访问*.niyueling.cn,会重定向到niyueling.cn,然后生成对应的nginx配置文件。我们可以下载zip包或者直接复制替换我们的配置文件:然后替换端服务器nginx的配置文件,使用nginx-t命令测试文件是否有问题,如果配置文件没问题,使用nginx-sreload命令重启服务器。为了保证更换前不会出现意外,最好提前做好配置文件的备份。如果喜欢我的文章,欢迎关注我的简介公众号:程序员周先森。
