一、Nginx介绍与安装

1 Nginx简介

1.1 什么是Nginx?

     Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到Apache的近 2/3。对proxy和rewrite模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts,适合用来做mongrel clusters的前端HTTP响应。目前Nginx在国内很多大型企业都有应用,且普及率呈逐年上升趋势。选择Nginx的理由也很简单:
第一,它可以支持 5W 高并发连接;
第二,内存消耗少;
第三,成本低。

1.2 Nginx在架构中发挥的作用

  • 网关
    — 面向客户的总入口。
  • 虚拟主机
    — 一台机器为不同的域名/ip/端口提供服务
  • 路由
    — 使用反向代理,整合后续服务为一个完整业务
  • 静态服务器
    — mvvm 模式中,用来发布前端 html/css/js/img
  • 负载集群
    — 使用 upstream,负载多个 tomcat

2 Nginx架构设计

2.1 Nginx的模块化设计

     高度模块化的设计是Nginx的架构基础。Nginx服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。

一、Nginx介绍与安装
  • 核心模块
    核心模块是Nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。
  • 标准HTTP模块
    标准HTTP模块提供HTTP协议解析相关的功能,如:端口配置、网页编码设置、HTTP响应头设置等。
  • 可选HTTP模块
    可选HTTP模块主要用于扩展标准的HTTP功能,让Nginx 能处理一些特殊的服务,如:Flash多媒体传输、解析GeoIP请求、SSL支持等。
  • 邮件服务模块
    邮件服务模块主要用于支持Nginx的邮件服务,包括对POP3 协议、IMAP协议和SMTP协议的支持。
  • 第三方模块
    第三方模块是为了扩展Nginx服务器应用,完成开发者自定义功能,如:Json支持、Lua支持等。

2.2 Nginx多进程模型

一、Nginx介绍与安装

     服务器每当收到一个客户端时。就有服务器主进程(master process)生成一个子进程(worker process)出来和客户端建立连接进行交互,直到连接断开,该子进程结束。
     使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影
响,同时降低编程的复杂度,降低开发成本。
     其次,采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master进程则很快启动新的worker进程,确保服务不中断,将风险降到最低。
     缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销;当有大量请求时,会导致系统性能下降。
master主要管理worker进程,包含:
     接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
发送信号的方式:
     kill -QUIT 进程号 安全停止
     kil -TERM 进程号 立即停止

2.3 Nginx的epoll模式(Nginx的异步非阻塞IO)

一、Nginx介绍与安装

上图为传统的select和poll方式(忙轮询):
1、一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。
2、收集所有的tcp连接,把套接字传给操作系统处理数据给我
Epoll模式:
1、惊群(与epoll方式一样)
2、内核把事件写入Map,方便快速查找
–发生IO事件时,内核到Map中查找my_events

2.4 正向代理与反向代理

代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

一、Nginx介绍与安装

反向代理(Reverse Proxy):指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

一、Nginx介绍与安装

3 Nginx安装配置

3.1 源码编译方式(建议)

安装make 和 g++ (一般系统中存在则无须再装,若是不存在即安装):
     安装 make:yum -y install autoconf automake make
     安装 g++: yum -y install gcc gcc-c++
安装nginx依赖的库
     yum -y install pcre pcre-devel
     yum -y install zlib zlib-devel
     yum install -y openssl openssl-devel
安装配置nginx:
① 下载:wget http://nginx.org/download/nginx-1.15.8.tar.gz
② 解压:tar -zxvf nginx-1.15.8.tar.gz
③ 进入解压后的文件:nginx-1.15.8
④ 配置:./configure命令(./configure --prefix=/usr/local/nginx --with-http_stub_status_module
–with-http_ssl_module)
⑤ 编译:make
⑥ 安装:make install
⑦ 配置环境变量:vi /etc/profile命令进入配置文件,最后一行加入export PATH=$PATH:/usr/local/nginx/sbin/
(后方代表nginx配置文件目录路径),执行source /etc/profile生效配置文件
注意: --prefix 指定安装目录 --with-http_ssl_module 安装 https 模块(默认安装目录/usr/local/nginx,当出现creating objs/Makefile 代表编译成功)

3.2 yum方式安装

yum install yum-utils
yum-config-manager --add-repo
https://openresty.org/package/centos/openresty.repo
yum install openresty

3.3 Nginx目录结构

  • Conf 配置文件
  • Html 网页文件
  • Logs 日志文件
  • Sbin 二进制程序

3.4 Nginx常用命令

./nginx -c nginx.conf 的文件。如果不指定,默认为 NGINX_HOME/conf/nginx.conf
./nginx -s stop 停止
./nginx -s quit 退出
./nginx -s reload 重新加载nginx.conf
注意:执行上面命令需要进入到nginx的sbin目录下,或者在其他目录下执行命令不带./

4 Nginx模型概念

Nginx会按需同时运行多个进程:
     一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。
     所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
     主进程以root 用户身份运行,而worker、cache loader 和cache manager 均应以非特权用户身份(user 配置项)运行。
主进程主要完成如下工作:
①读取并验正配置信息;
②创建、绑定及关闭套接字;
③启动、终止及维护 worker 进程的个数;
④无须中止服务而重新配置工作特性;
⑤重新打开日志文件;
worker 进程主要完成的任务包括:
①接收、传入并处理来自客户端的连接;
②提供反向代理及过滤功能;
③nginx任何能完成的其它任务;

5 nginx.conf配置文件结构

一、Nginx介绍与安装

main(全局设置)
events设定nginx的工作模式及连接数上限
http 服务器相关属性
server(虚拟主机设置)
upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)
location(URL匹配特定位置后的设置)