Nginx基础原理

2018-02-04

Nginx基础原理

[TOC]

1.概念

面向性能设计的Http服务器,内存占用少,稳定性高,也是轻量级的网页服务器/反向代理服务器/电子邮件代理服务器

Nginx单独使用足以支撑5W的并发连接,可以作为负载均衡的入口,根据使用情况来分发给不同的tomcat

百度、京东、新浪、网易、腾讯、淘宝等都在使用Nginx

2.组成

Nginx由内核模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

​ 核心模块:HTTP模块、EVENT模块和MAIL模块

​ 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,

​ 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。

用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。

Nginx原理和优化:https://www.cnblogs.com/linguoguo/p/5511293.html(很棒的文章)

3.作用

  1. 反向代理:位于原始服务器后面,客户端访问原始服务器后,原始服务器会去反向代理服务器获取需要的资源(服务器端)
  2. 正向代理:位于客户端和原始服务器之间,客户端请求该代理服务器,该代理服务器再去访问原始服务器,响应原路返回(客户端,局域网访问网络)

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。

正向代理还可以使用缓冲特性减少网络使用率。

反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。

反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

  1. 负载均衡:Nginx最常用的功能之一,将工作分摊多个操作单元上执行,需要反向代理跳转到负载均衡
  2. HTTP服务器:Nginx本身就是静态资源服务器,Nginx可以很方便的实现动静分离

动静分离: nginx还可以对数据进行压缩,对一些图片、html、css、js等文件进行缓存、从而实现动静分离等等优化功能,在网站做优化的时候非常的有用。

  • 所谓的动静分离,可以理解为我们完全可以将动态的请求都交给tomcat处理,静态的请求都交给nginx来处理,这是非常容易做到的事情。

Nginx基础功能和工作原理:https://blog.csdn.net/wy757510722/article/details/75267431(很棒的文章)

(待更新)

4.Nginx配置详细清单

  1. server 配置静态资源 端口或者域名区分
  2. proxy_pass 配置反向代理
  3. upstream 配置负载均衡及权重

端口版:http://www.cnblogs.com/dancesir/p/9253043.html

集群搭建:https://blog.csdn.net/u012453843/article/details/69664821

5.Nginx负载均衡策略

对于单独的Nginx而言,通过Nginx服务器搭建Tomcat等服务器集群(可以设置权重)可以提高基础的并发

6.Keepalived结合Nginx实现高可用

  1. Keepalived绑定Nginx主从服务器的健康状态,备份服务器通过心跳机制检测主服务器是否ok(心跳包)
  2. Keepalived可以绑定vip(Virtual IP Address)动态绑定虚拟IP,在谁身上就用谁(一般发到主服务器)
  3. 主服务器宕机的时候,备份服务器会和keepalived绑定(主服务器起来后重新获得vip)

Keepalived结合高可用使用:https://blog.csdn.net/u012453843/article/details/69668663

7.负载均衡策略

当并发超过Nginx上限的处理(应用层)
7-1.F5硬负载(4层分发)

(经费充足)如果并发超过5W,可以处理硬负载并发问题(从传输层开始处理,效果更好)

7-2.LVS(Linux Virtual Server)(4层分发)

(经济实惠)实现硬负载60%的性能

7-3.使用阿里云服务器均衡负载SLB

8.Keepalived结合LVS实现高可用

(类似Keepalived和Nginx的高可用)