最基础的Nginx教学

文章原创于微信公众号:程序猿周先森。其余平台不定时更新,喜欢个人文章欢迎关注微信公众号。

NginxApache同样都是一种WEB服务器。基于REST架构风格,以统一资源描述符URI或者统一资源定位符URL做为沟通依据,经过HTTP协议提供各类网络服务。然而,这些服务器在设计之初受到当时的用户规模,网络带宽,产品特色等局限而且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特色。Apache的发展时期很长,它有着不少优势:稳定、开源、跨平台等等。因此它被设计为一个重量级的WEB服务器,可是它不支持高并发。在Apache上进行并发访问,会致使服务器消耗大量内存。操做系统对其进行进程或线程间的切换也消耗了大量的CPU资源,致使HTTP请求的平均响应速度下降。这时候轻量级高并发服务器Nginx就应运而生了。php

Nginx为何会火爆互联网呢?正是因为Nginx的几大显著的特色存在:python

Nginx使用基于事件驱动架构,使得其能够支持数以百万级别的TCP链接
    
    高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
    
    Nginx是一个跨平台服务器,能够运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操做系统上,这些优秀的设计带来的极大的稳定性

众所周知,Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP三、SMTP代理服务器;Nginx能够做为一个HTTP服务器进行网站的发布处理,另外Nginx能够做为反向代理进行负载均衡的实现。而说到代理,又分为正向代理与反向代理。nginx

正向代理算法

正向代理也是你们最常接触的到的代理模式,那究竟什么是正向代理呢?咱们都知道Google在国内是没法正常访问的,可是某些时候咱们因为技术问题须要去访问Google时,咱们会先找到一个能够访问Google的代理服务器,咱们将请求发送到代理服务器,代理服务器去访问Google,而后将访问到的数据返回给咱们,这样的过程就是正向代理。后端

正向代理的特色缓存

正向代理最大的特色是客户端须要明确知道要访问的服务器地址,Google服务器只清楚请求来自哪一个代理服务器,而不清楚来自哪一个具体的客户端,正向代理能够隐藏真实客户端的具体信息。安全

clipboard.png

客户端必须设置正向代理服务器,并且须要知道正向代理服务器的IP地址以及代理程序的端口。一句话来归纳就是正向代理代理的是客户端,是一个位于客户端和Google服务器之间的服务器,为了从Google服务器取得数据,客户端向代理服务器发送一个请求并指定目标(Google服务器),而后代理向原始服务器转交请求并将得到的数据返回给客户端。服务器

正向代理的使用:微信

访问国外没法访问的网站

作缓存,加速访问资源

对客户端访问受权,上网进行认证

代理能够记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理网络

说完了什么是正向代理,咱们接下来看看什么叫作反向代理,若是咱们网站每日访问量达到某个上限,单个服务器远远不能符合咱们平常需求,这时候咱们首先会想到分布式部署。经过部署多台服务器来解决访问人数限制的问题,而后咱们功能其实大部分都是经过Nginx反向代理来实现的。咱们能够看下图:
**
clipboard.png
加粗文字**

反向代理的特色

咱们能够清楚的看到,多个客户端给服务器发送的请求,Nginx服务器接收到请求之后,按照必定的规则转发到不一样的服务器进行业务逻辑处理。此时请求来源于哪一个客户端是肯定的,可是请求由哪台服务器处理的并不明确,Nginx扮演的就是一个反向代理角色。能够这样来理解,反向代理对外都是透明的,访问者并不知道本身访问的是一个代理。反向代理代理的是服务端,主要用于服务器集群分布式部署的状况下,反向代理隐藏了服务器的信息。

反向代理的使用:

保证内网的安全,一般将反向代理做为公网访问地址,**Web**服务器是内网

负载均衡,经过反向代理服务器来优化网站的负载

正向代理与反向代理区别

在正向代理中,隐藏了请求来源的客户端信息;

在反向代理中,隐藏了请求具体处理的服务端信息;

clipboard.png

负载均衡

Nginx既然扮演了反向代理的角色,它是以依据什么样的规则进行请求分发的呢?分发的规则是否能够控制呢?负载量按照必定的规则进行分发到不一样的服务器处理的规则,就是一种均衡规则。将服务器接收到的请求按照规则分发的过程,称为负载均衡。

Nginx支持的负载均衡调度算法方式以下:

weight轮询(默认):接收到的请求按照请求顺序逐一分配到不一样的后端服务器,若是在使用过程当中,某一台服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理状况不会受到任何影响。这种方式下,能够给不一样的后端服务器设置一个权重值,权重数据越大,服务器被分配到请求的概率越大。

ip_hash:每一个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器。

fair:智能调整调度算法,动态的根据后端服务器的请求响应时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的几率高,响应时间长处理效率低的服务器分配到的请求少。

url_hash:按照访问的url的hash结果分配请求,每一个请求的url会指向后端固定的某个服务器,能够在Nginx做为静态服务器的状况下提升缓存效率。

注意:

Nginx默认不支持fair算法,若是要使用这种调度算法,须要安装upstream_fair模块。

Nginx默认不支持url_hash调度算法,要使用的话须要安装Nginx的hash软件包。

做为一个Nginx的使用者,在编写配置文件确定出现过问题,可能常常须要将大量时间花费在配置文件编写上面。因此接下来顺便介绍一个在线快速生成Nginx配置文件的网站:

https://nginxconfig.io/

这个网站支持http,https,php,python,Node,缓存,日志等各类配置选项,能够在线生成Nginx的配置文件。并且使用方法极其简单,只须要在网站内填写对应的需求,就能够一键生成配置文件。

clipboard.png

参数说明:

Domain:绑定的域名
Path:根目录所在
Document root:根目录下的实际项目名称
Redirect subdomains:若是访问*.niyueling.cn会重定向跳转到niyueling.cn

而后在下面就能够生成对应的nginx配置文件。咱们能够下载zip包或者直接复制替换咱们的配置文件:

clipboard.png

而后替换结束服务器nginx的配置文件,使用nginx -t命令测试文件是否存在问题,若配置文件没问题,则使用 nginx -s reload命令重启服务器。替换以前为了确保不会发生意外,最好提早作好配置文件的备份。

若是喜欢个人文章,欢迎关注个人我的公众号:程序猿周先森。

clipboard.png

相关文章
相关标签/搜索