Nginx之基础概念及特性介绍
文章目录
- Nginx之基础概念及特性介绍
- 1. Nginx的基础概念及特性
- 1.1 什么是Nginx?
- 1.2 Nginx的特点
- 1.3 Nginx的基本功能
- 1.4 Nginx的扩展功能
- 1.5 Nginx的基本架构
- 1.6 Nginx的模块类型
- 2. Nginx的安装部署
- 2.1 RPM方式安装
- 2.2 源码编译安装
- 2.3 二进制程序nginx常用命令
1. Nginx的基础概念及特性
1.1 什么是Nginx?
Nginx是一款轻量级的HTTP服务器,发音为“engine X”,是一款高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,一个通用的TCP / UDP代理服务器。其特点是占用内存资源少,并发能力强,根据官方提供的资料,单台服务器并发能力最高能达到5万个。Nginx最初是由俄罗斯人Igor Sysoev 为俄罗斯的访问量第二的站点Ramber.ru开发的,使用了基于BSD的许可。Nginx的官方站点:http://nginx.org/
Nginx是以事件驱动的方式编写,所以具备非常好的性能,同时也是一个非常高效的反向代理、负载均衡。其拥有匹配lighttpd的性能,同时还没有lighttpd的内存泄漏问题。根据官方资料,Nginx维持10000个非活动连接,只需要2.5M内存。
目前很多国内的网站采用Nginx作为Web Server,如国内知名的新浪、163、腾讯、Discuz、豆瓣等。还有诸如淘宝对Nginx作了二次开发的tengine等等。根据netcraft统计,截止目前2018年,Nginx已超越了Apache在全球web server中排名第2,占有21.71%的份额。
Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到 Apache 的近 2/3。对 proxy 和 rewrite 模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts ,适合用来做 mongrel clusters 的前端 HTTP 响应。
1.2 Nginx的特点
- 提供静态和 索引 文件, 自动索引 ; 打开文件描述符缓存 ;
- 通过缓存加速反向代理 ; 负载均衡和容错 ;
- 通过缓存FastCGI, uwsgi, SCGI和 memcached 服务器加速支持 ; 负载均衡和容错 ;
- 模块化架构。过滤器包括 gzipping,字节范围,分块响应, XSLT, SSI和图像变换过滤器。如果由代理或FastCGI / uwsgi / SCGI服务器处理,则可以并行处理单个页面中的多个SSI包含;
- SSL和TLS SNI支持 ;
- 支持HTTP / 2, 具有加权和基于依赖性的优先级。
1.3 Nginx的基本功能
- 处理静态文件,索引文件及自动索引;打开文件描述符缓存;
- 通过加速缓存的反向代理;负载均衡和容错;
- 通过缓存FastCGI,uwsgi,SCGI和memcached服务器加速支持;负载均衡和容错;
- 模块化的结构;包括 gzipping,byte ranges,chunked responses,以及SSI-filter。如果由FastCGI或其他代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,则不需要相互等待;
- 支持SSL和TLS SNI;
- 支持HTTP / 2;具有加权和基于依赖性的优先级;
1.4 Nginx的扩展功能
- 基于名称和基于IP的虚拟服务器;
- 支持活动连接keep-alive;
- 支持定制访问日志格式,缓冲日志写入,快速日志轮换和syslog日志记录;
- 3xx-5xx错误代码的重定向;
- 支持使用正则表达式的URL重写;
- 根据客户端地址执行不同的功能;
- 支持基于客户端IP地址,密码(http基本身份验证)和子请求结果的访问控制;
- 验证http_referer;
- 响应速度限制;
- 支持限制来自一个IP地址的并发连接数和请求数;
- 支持FLV和MP4的流媒体;
1.5 Nginx的基本架构
Nginx是一个支持非阻塞、事件驱动型及异步I/O模型的web server;它是以多进程的方式工作的。
Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程;包括接收来自客户端http/https请求,向各worker进程发送信号,由worker进程处理,监控worker进程的运行状态;当worker进程异常终止,会自动重新启动新的worker进程。而基本的http连接请求都是由worker进程处理并响应;master只负责分配接入的请求给worker。每个worker进程不会干扰其他worker进程的请求处理。worker的数量是一个设置的,一般会设置与服务器的物理核心数量一致。
1.6 Nginx的模块类型
Nginx的模块主要由以下几部分组成:
- Nginx core:核心模块;
- Standard HTTP modules:标准的HTTP模块;
- Optional HTTP modules:可选的HTTP模块;
- Mail modules:邮件模块;
- Third party module:第三方模块;
Nginx提供了Web服务器的基础功能,同时提供了Web服务反向代理、邮件服务反向代理功能。Nginx core实现了底层的通讯协议,为其他模块和Nginx进程构建了基本的运行时环境,为其他模块构建了协调运行的基础。
2. Nginx的安装部署
2.1 RPM方式安装
rpm方式安装,只需要添加epel源便可即可:
# 配置epel源
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 安装
[root@localhost ~]# yum install -y nginx
# 启动
[root@localhost ~]# systemctl enable nginx.service
[root@localhost ~]# systemctl start nginx.service
2.2 源码编译安装
# 创建nginx用户及组
[root@localhost ~]# groupadd nginx
[root@localhost ~]# useradd -g nginx -s /sbin/nologin nginx
# 下载源码包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@localhost ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
# 安装
[root@localhost ~]# make && make install
# 启动
[root@localhost ~]# /usr/local/nginx/sbin/nginx
使用configure命令配置编译安装,可参考官方文档的,查看该命令支持的参数及含义:http://nginx.org/en/docs/configure.html
2.3 二进制程序nginx常用命令
nginx -t # 测试nginx配置文件的语法是否有误
nginx -s stop # 处理完最后一个请求后停止nginx进程,包括master和worker进程;
nginx -s reload # 重载配置文件;配置文件修改后可以使用该命令不重启nginx平滑加载nginx配置;
nginx的基础概念及特性介绍完毕。