凌云的博客

行胜于言

Nginx 基础

分类:nginx| 发布时间:2019-12-18 17:06:00


主要应用场景

  • 本地资源服务 通过本地文件系统提供服务
  • 反向代理服务
    • 缓存加速
    • 负责均衡
  • API 服务,如 OpenResty

Nginx 的优点

  • 高并发,高性能,同时处理数千万的连接数,静态资源能达到百万级别的 Requests per second
  • 可扩展性好
  • 高可靠性
  • 热部署
  • 开源 BSD 许可证

Nginx 的组成

  • nginx 二进制文件
  • nginx.conf 配置文件
  • access.log 访问日志
  • error.log 错误日志

Nginx 的编译安装

在 Ubuntu 下,可以通过以下命令安装 nginx

$ sudo apt-get install nginx

当然也可以通过下载源码编译安装,如果是通过源码方式进行安装,默认需要下载以下工具和库

$ sudo apt-get install g++
$ sudo apt-get install make
$ sudo apt-get install libpcre3-dev
$ sudo apt-get install zlib1g-dev

然后在源码目录执行以下命令

$ ./configure --prefix=<path>
$ make
$ make install

Nginx 的配置语法

  • 配置语法由指令和指令块组成
  • 指令由分号结尾,指令和参数间由空格分开
  • 指令块通过大括号将多条指令组织在一起
  • include 语句允许组合多个配置文件以提升可维护性
  • 通过 # 可以添加注释
  • 通过 $ 使用变量
  • 部分指令参数支持正则表达式

Nginx 命令行

$ ./nginx -h    
nginx version: nginx/1.17.6
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /home/ubuntu/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

停止服务

$ nginx -s stop

或者

$ kill -s SIGTERM <ngnix pid>

优雅地停止服务

与停止服务不同的是,优雅地停止服务会先关闭监听端口、停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

$ nginx -s quit

或者

$ kill -s SIGQUIT <ngnix pid>

如果希望优雅地停止某个 worker 进程,可以通过 SIGWINCH 信号

$ kill -s SIGWINCH <ngnix worker pid>

重载配置文件

$ nginx -s reload

平滑升级 Nginx

当 Nginx 服务升级到新的版本时,必须要将旧的二进制文件 Nginx 替换掉、通常情况下这是需要重启服务的,但 Nginx 支持不重启服务来完成新版本的平滑升级。

步骤如下:

  • 使用新版本的 nginx 替换旧版 nginx 的二进制文件(注意回退)
  • 对 nginx 的 master 进程发送 SIGUSR2 信号
  • 对旧的 nginx master 进程发送 SIGQUIT 信号