【愚公系列】2022年03月 .NET架构班 028-分布式中间件 Nginx介绍
一、Nginx简介
Nginx是高性能HTTP服务器,反向代理服务器,邮件代理服务器,TCP/UDP反向代理服务器。
1.Nginx软件的主要企业功能应用
(1)作为Web服务软件
Nginx是一个支持高性能,高并发的Web服务软件,它具有很多优秀的特性,作为Web服务器,与Apache相比,Nginx能够支持更多的并发连接访问,但占用的资源更少,效率更高,在功能上也强大了很多,几乎不逊色于Apache。
(2)反向代理或负载均衡服务
在反向代理或负载均衡服务方面,Nginx可以作为Web服务,PHP等动态服务及Memcached缓存的代理服务器,它具有类似专业反向代理软件(如Haproxy)的功能,同时也是一个优秀的邮件代理服务软件,但是Nginx的代理功能还是相对简单了些,特别是不支持TCP的代理(Nginx1.9.0版本已经开始支持TCP代理了)
(3)前端业务数据缓存服务
在Web缓存服务方面,Nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能。
综上:Nginx的这三大功能(Web服务,反向代理或负载均衡服务,前端业务数据缓存服务)是国内使用Nginx的主要场景,特别是前两个。
二、Nginx使用场景
Nginx主要用在集群系统中。单个系统,主要用来处理客户端的请求,一个系统处理客户端的请求量是有限的,当客户端的并发量,操过了系统处理的并发能力,就会导致系统处理速度变慢,也就是所谓的性能下降。所以,为了提升性能。因此我们需要通过多个实例来分离。所以, 我们会创建多个系统实例,形成的系统就叫做集群系统。Nginx在集群中的作用主要是分流。
三、Nginx的基本使用
1.Nginx的准备
Nginx下载地址:http://nginx.org/download/
下载完,目录如下:
2.分流基本配置
下面以动态负载均衡配置为例
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://XT.EBusiness;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#动态负载均衡配置
upstream XT.EBusiness{
server localhost:5001;
server localhost:5002;
}
}
四、Nginx相关概念
1.模块化设计
高度模块化的设计是 Nginx 的架构基础。在 Nginx 中,除了少量的核心代码,其他一切皆为模块。
所有模块间是分层次、分类别的,Nginx 官方共有五大类型的模块:核心模块、配置模块、事件模块、HTTP 模块、mail 模块、stream模块。它们之间的关系如下:
在这 5 种模块中,配置模块和核心模块是与 Nginx 框架密切相关的。而事件模块则是 HTTP 模块和 mail 模块的基础。HTTP 模块和 mail 模块的“地位”类似,它们都是更关注于应用层面。
2.多进程模型
Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程,具体如下图:
3.事件驱动架构
由上图可以看出,处理请求事件时,Nginx 的事件消费者只是被事件分发者进程短期调用而已,这种设计使得网络性能、用户感知的请求时延都得到了提升,每个用户的请求所产生的事件会及时响应,整个服务器的网络吞吐量都会由于事件的及时响应而增大。当然,这也带来一定的要求,即每个事件消费者都不能有阻塞行为,否则将会由于长时间占用事件分发者进程而导致其他事件得不到及时响应,Nginx 的非阻塞特性就是由于它的模块都是满足这个要求的。
3.虚拟主机
ngx_http_core_module
作用:虚拟主机就是为了对所有应用系统进行反向代理
4.反向代理
ngx_http_proxy_module
作用:代理后端服务器。
5.负载均衡
ngx_http_upstream_module
作用:将流量均分到指定后端实例
- 点赞
- 收藏
- 关注作者
评论(0)