01. 《Nignx实战 —— 简介、安装、操作》

Nginx 简介、安装 及 操作

1. Nginx简介

Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡。

1.1 Nginx实现原理

Nginx采用的时多路复用IO,所谓多路复用IO,即是:多个描述的I/O操作都能在一个线程内完成并发交替地顺序完成,这就是I/O多路复用(这里的复用指的是复用同一个线程)。

1.2 Nginx优点

1.2.1 I/O多路复用

I/O多路复用实现的方式:select,poll,epoll三种方式:

  • 什么是select

01. 《Nignx实战 —— 简介、安装、操作》

  • select缺点

    • 能够监视文件描述符的数量存在最大限制1024个
    • 线性扫描效率低下
  • epoll模型(Nginx采用)

    • 每当FD就绪,采用系统的回调函数之间将fd放入,效率登高。
    • 最大连接无限制
1.2.2 轻量级
  • 功能模块少

    Nginx只保留有用的模块,其余模块均已插件的形式存在。

  • 代码模块化

1.2.3 CPU亲和

CPU亲和:是一种CPU核心和Nginx工作进程绑定的方式,把每个worker进程固定在一个CPU上执行,减少切换CPU的cache miss,获得更好的额性能。

01. 《Nignx实战 —— 简介、安装、操作》

1.2.4 sendFile
  • 传统的文件拷贝方式

01. 《Nignx实战 —— 简介、安装、操作》

  • Linux2.0以后出现的0拷贝模式
    文件的传输只通过内核空间传递给socket,呈现个用户。

2. Nginx 安装

2.1 准备环境

  • 安装c、c++编译环境,如已安装可略过
[[email protected] src]# yum install gcc gcc-c++
// 期间会有确认提示输入y回车
Is this ok [y/N]:y
  • openssl安装
[[email protected] src]# yum install -y pcre pcre-devel
  • pcre安装
[[email protected] src]# yum install -y zlib zlib-devel
  • zlib安装
[[email protected] src]# yum install -y openssl openssl-devel

2.2 nginx安装

  • 下载 Nginx
[[email protected] src]# wget http://nginx.org/download/nginx-1.14.1.tar.gz
  • 解压
[[email protected] src]# tar zxvf nginx-1.14.1.tar.gz
[[email protected] src]# cd nginx-1.14.1
  • 检测环境并编译安装
[[email protected] nginx-1.14.1]# ./configure && make && make install

2.3 安装完成

  • 安装位置
[[email protected] nginx]#pwd
/usr/local/nginx
  • 安装后文件目录
[[email protected] nginx]#ls
conf  html  logs  sbin
[[email protected] nginx]#tree
.
├── conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── html
│   ├── 50x.html
│   └── index.html
├── logs
└── sbin
    └── nginx

4 directories, 18 files

// 目录说明
conf    存放配置文件
html    网页文件
logs    存放日志
sbin    shell启动、停止等脚本

3. Nginx 操作

3.1 Nginx 启动

// 指令:nginx程序   -c   nginx配置文件
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

如果使用-c指定配置文件,默认使用/usr/local/nginx/conf/nginx.conf

3.2 nginx重启

# cd /usr/local/nginx/sbin
// 重启
[[email protected] sbin]# ./nginx -s reload

如果使用此指令时,Nginx未处于启动运行状态,将会抛出以下异常:

[[email protected] sbin]#./nginx -s reload
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

3.3 nginx停止

// 方式一
[[email protected] sbin]# ./nginx -s stop 

// 方式二
[[email protected] sbin]# ./nginx -s quit

说明:

  • quit:是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求
  • stop:是快速关闭,不管有没有正在处理的请求。

3.4 重新打开日志

[[email protected] sbin]# ./nginx -s reopen 

3.5 nginx检查配置文件

  • 检查默认配置文件是否正确
[[email protected] sbin]# ./nginx -t
  • 检查指定配置文件是否正确
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

-c后指定具体配置文件位置。

4. nginx的信号控制

4.1 进程类型

Nginx支持2种进程模型Single和Master-Worker

  • Single是单进程,一般不适用,
  • Master-Worker是主进程和工作进程模型运行,主进程对工作进程管理。

Nginx允许我们通过信号来控制主进程,用信号的方式可以达到不影响现有连接的目的。

4.2 信号类型

  • INT,TERM:快速关闭信号
  • QUIT:从容关闭信号
  • HUP:从容重启信号,一般用于修改配置文件后,重启
  • USR1:重读日志,一般用于日志的切割
  • USR2:平滑升级信号
  • WINCH:从容关闭旧进程

4.3 使用信号量控制进程

  • 语法:
kill    -信号选项    nginx的主进程号
// 例:
# kill -INT 26661 
# kill -HUP 4873
  • Nginx 停止
#  ps -ef | grep nginx 获得进程号

// 第1种从容“优雅”停止
# kill -QUIT master进程号
// 说明:
// # Nginx服务可以正常地处理完当前所有请求再停止服务
// # 步骤:首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

// 第2种快速停止
# kill -TERM master进程号
# kill -INT master进程号
// 说明:
// # 快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。

// 第3种强制停止
# pkill -9 nginx
// 说明:系统强杀nginx进程
  • Nginx 重启
kill -HUP master进程号

已经介绍了,QUIT,INT,TERM,HUP的信号
下几节课程会详细介绍USR1,USR2,WINCH信号。

.

.

.

.

.

.