Nginx(一)

21 篇文章 1 订阅
11 篇文章 0 订阅

一、Nginx简介

1.1 背景介绍

Nginx (“engine x”)一个具有高性能的【 HTTP 】和【反向代理】的
WEB 服务器】,同时也是一个【 POP3/SMTP/IMAP 代理服务器】,是
由伊戈尔 · 赛索耶夫 ( 俄罗斯人 ) 使用 C 语言编写的, Nginx 的第一个版本是
2004 10 4 号发布的 0.1.0 版本。另外值得一提的是伊戈尔 · 赛索耶夫将
Nginx 的源码进行了开源,这也为 Nginx 的发展提供了良好的保障。
名词解释
1. WEB 服务器:
WEB 服务器也叫网页服务器,英文名叫 Web Server ,主要功能是为用户
提供网上信息浏览服务。
2. HTTP:
HTTP 是超文本传输协议的缩写,是用于从 WEB 服务器传输超文本到本地
浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。 HTTP
是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务
端是网站,通过使用 Web 浏览器、网络爬虫或者其他工具,客户端发起
一个到服务器上指定端口的 HTTP 请求。
3. POP3/SMTP/IMAP
POP3(Post Offiffiffic Protocol 3) 邮局协议的第三个版本,
SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议,
IMAP(Internet Mail Access Protocol) 交互式邮件存取协议,
通过上述名词的解释,我们可以了解到 Nginx 也可以作为电子邮件代理
服务器。
4. 反向代理
正向代理

反向代理

1.2常见服务器对比

我们先来认识一家公司叫Netcraft

Netcraft 公司于 1994 年底在英国成立,多年来一直致力于互联网市场以
及在线安全方面的咨询服务,其中在国际上最具影响力的当属其针对网站
服务器、 SSL 市场所做的客观严谨的分析研究,公司官网每月公布的调研
数据(Web Server Survey)已成为当今人们了解全球网站数量以及服
务器市场分额情况的主要参考依据,时常被诸如华尔街杂志,英国 BBC
Slashdot 等媒体报道或引用。
我们先来看一组数据,我们先打开 Nginx 的官方网站 http://nginx.org/ ,
找到 Netcraft 公司公布的数据,对当前主流服务器产品进行介绍。

上面这张图展示了 2019 年全球主流 Web 服务器的市场情况,其中有
Apache Microsoft-IIS google Servers Nginx Tomcat 等,而我们
在了解新事物的时候,往往习惯通过类比来帮助自己理解事物的概貌。
所以下面我们把几种常见的服务器来给大家简单介绍下:
IIS
全称 (Internet Information Services) 即互联网信息服务,是由微软公司
提供的基于 windows 系统的互联网基本服务。 windows 作为服务器在稳
定性与其他一些性能上都不如类 UNIX 操作系统,因此在需要高性能 Web
服务器的场合下, IIS 可能就会被 " 冷落 ".
Tomcat
Tomcat 是一个运行 Servlet JSP Web 应用软件, Tomcat 技术先进、性
能稳定而且开放源代码,因此深受 Java 爱好者的喜爱并得到了部分软件
开发商的认可,成为目前比较流行的 Web 应用服务器。但是 Tomcat 天生
是一个重量级的 Web 服务器,对静态文件和高并发的处理比较弱。
Apache
Apache 的发展时期很长,同时也有过一段辉煌的业绩。从上图可以看出
大概在 2014 年以前都是市场份额第一的服务器。 Apache 有很多优点,
如稳定、开源、跨平台等。但是它出现的时间太久了,在它兴起的年
代,互联网的产业规模远远不如今天,所以它被设计成一个重量级的、
不支持高并发的 Web 服务器。在 Apache 服务器上,如果有数以万计的并
HTTP 请求同时访问,就会导致服务器上消耗大量能存,操作系统内核
对成百上千的 Apache 进程做进程间切换也会消耗大量的 CUP 资源,并导
HTTP 请求的平均响应速度降低,这些都决定了 Apache 不可能成为高
性能的 Web 服务器。这也促使了 Lighttpd Nginx 的出现。
Lighttpd
Lighttpd 是德国的一个开源的 Web 服务器软件,它和 Nginx 一样,都是轻
量级、高性能的 Web 服务器,欧美的业界开发者比较钟爱 Lighttpd, 而国
内的公司更多的青睐 Nginx ,同时网上 Nginx 的资源要更丰富些。
其他的服务器
Google Servers Weblogic, Webshpere(IBM)...
经过各个服务器的对比,种种迹象都表明, Nginx 将以性能为王。这也
是我们为什么选择 Nginx 的理由。
Nginx 的优点
(1) 速度更快、并发更高
单次请求或者高并发请求的环境下, Nginx 都会比其他 Web 服务器响应
的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一
方面,在高峰期 ( 如有数以万计的并发请求 ) Nginx 比其他 Web 服务器更
快的响应请求。 Nginx 之所以有这么高的并发处理能力和这么好的性能
原因在于 Nginx 采用了多进程和 I/O 多路复用 (epoll) 的底层实现。
(2) 配置简单,扩展性强
Nginx 的设计极具扩展性,它本身就是由很多模块组成,这些模块的使
用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方
提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。
(3) 高可靠性
Nginx 采用的是多进程模式运行,其中有一个 master 主进程和 N 多个
worker 进程, worker 进程的数量我们可以手动设置,每个 worker 进程
之间都是相互独立提供服务,并且 master 主进程可以在某一个 worker
程出错时,快速去 " 拉起 " 新的 worker 进程提供服务。
(4) 热部署
现在互联网项目都要求以 7*24 小时进行服务的提供,针对于这一要求,
Nginx 也提供了热部署功能,即可以在 Nginx 不停止的情况下,对 Nginx
进行文件升级、更新配置和更换日志文件等功能。
(5) 成本低、 BSD 许可证
BSD 是一个开源的许可证,世界上的开源许可证有很多,现在比较流行
的有六种分别是 GPL BSD MIT Mozilla Apache LGPL 。这六种的
区别是什么,我们可以通过下面一张图来解释下:

Nginx 本身是开源的,我们不仅可以免费的将 Nginx 应用在商业领域,而
且还可以在项目中直接修改 Nginx 的源码来定制自己的特殊要求。这些
点也都是 Nginx 为什么能吸引无数开发者继续为 Nginx 来贡献自己的智慧
和青春。 OpenRestry [Nginx+Lua] Tengine[ 淘宝 ]

1.3Nginx的功能特性及常用功能

Nginx 提供的基本功能服务从大体上归纳为 " 基本 HTTP 服务 " 高级
HTTP 服务 " 邮件服务 " 等三大类。
基本 HTTP 服务
Nginx 可以提供基本 HTTP 服务,可以作为 HTTP 代理服务器和反向代理服
务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持
包过滤功能,支持 SSL 等。
  • 处理静态文件、处理索引文件以及支持自动索引;
  • 提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载 均衡和容错;
  • 提供对FastCGImemcached等服务的缓存机制,,同时完成负载均 衡和容错;
  • 使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括 gzip压缩、ranges支持、chunked响应、XSLTSSI以及图像缩放 等。其中针对包含多个SSI的页面,经由FastCGI或反向代理,SSI滤器可以并行处理。
  • 支持HTTP下的安全套接层安全协议SSL.
  • 支持基于加权和依赖的优先权的HTTP/2
高级 HTTP 服务
  • 支持基于名字和IP的虚拟主机设置
  • 支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接
  • 自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
  • 提供3xx~5xx错误代码重定向功能
  • 支持重写(Rewrite)模块扩展
  • 支持重新加载配置以及在线升级时无需中断正在处理的请求
  • 支持网络监控
  • 支持FLVMP4流媒体传输
邮件服务
Nginx 提供邮件代理服务也是其基本开发需求之一,主要包含以下特
性:
  • 支持IMPA/POP3代理服务功能
  • 支持内部SMTP代理服务功能
Nginx 常用的功能模块
静态资源部署
Rewrite 地址重写
正则表达式
反向代理
负载均衡
轮询、加权轮询、 ip_hash url_hash fair
Web 缓存
环境部署
高可用的环境
用户认证模块 ...
Nginx 的核心组成
nginx 二进制可执行文件
nginx.conf 配置文件
error.log 错误的日志记录
access.log 访问日志记录

二、Nginx环境准备

2.1Nginx版本介绍

Nginx 的官方网站为 : http://nginx.org
打开源码可以看到如下的页面内容

Nginx 的官方下载网站为 http://nginx.org/en/download.html ,当然你
也可以之间在首页选中右边的 download 进入版本下载网页。在下载页面
我们会看到如下内容:

2.2获取Nginx源码

http://nginx.org/download/
打开上述网站,就可以查看到 Nginx 的所有版本,选中自己需要的版本
进行下载。下载我们可以直接在 windows 上下载然后上传到服务器,也
可以直接从服务器上下载,这个时候就需要准备一台服务器。

2.3准备服务器系统

环境准备

VMwareWorkStation
Centos7
MobaXterm
xsheel,SecureCRT
网络
(1) 确认 centos 的内核
准备一个内核为 2.6 及以上版本的操作系统,因为 linux2.6 及以上内核才
支持 epoll, Nginx 需要解决高并发压力问题是需要用到 epoll ,所以我们
需要有这样的版本要求。
我们可以使用 uname - a 命令来查询 linux 的内核版本。

 

(2) 确保 centos 能联网
ping www.baidu.com

(3) 确认关闭防火墙
这一项的要求仅针对于那些对 linux 系统的防火墙设置规则不太清楚的,
建议大家把防火墙都关闭掉,因为我们此次课程主要的内容是对 Nginx
的学习,把防火墙关闭掉,可以省掉后续 Nginx 学习过程中遇到的诸多
问题。
systemctl stop firewalld   关闭运行的防火墙,系统重新启
动后,防火墙将重新打开
systemctl disable firewalld  永久关闭防火墙,,系统重新启
动后,防火墙依然关闭
systemctl status firewalld 查看防火墙状态
(4)确认停用 selinux
selinux(security-enhanced linux), 美国安全局对于强制访问控制的实
现,在 linux2.6 内核以后的版本中, selinux 已经成功内核中的一部分。
可以说 selinux linux 史上最杰出的新安全子系统之一。虽然有了
selinux ,我们的系统会更安全,但是对于我们的学习 Nginx 的历程中,
会多很多设置,所以这块建议大家将 selinux 进行关闭。

sestatus 查看状态

如果查看不是 disabled 状态,我们可以通过修改配置文件来进行设置 ,
SELINUX=disabled ,然后重启下系统即可生效。
vim /etc/selinux/config

2.4Nginx安装方式介绍

Nginx的安装方式有两种分别是:

通过 Nginx 源码
通过 Nginx 源码简单安装 (1)
通过 Nginx 源码复杂安装 (3)
通过 yum 安装 (2)
如果通过 Nginx 源码安装需要提前准备的内容:
GCC 编译器
Nginx 是使用 C 语言编写的程序,因此想要运行 Nginx 就需要安装一个编
译工具。 GCC 就是一个开源的编译器集合,用于处理各种各样的语言,
其中就包含了 C 语言。
使用命令 yum install - y gcc 来安装
安装成功后,可以通过 gcc -- version 来查看 gcc 是否安装成功
PCRE
Nginx 在编译过程中需要使用到 PCRE 库( perl Compatible Regular
Expressoin 兼容正则表达式库 ) ,因为在 Nginx Rewrite 模块和 http
心模块都会使用到 PCRE 正则表达式语法。
可以使用命令 yum install - y pcre pcre - devel 来进行安装
安装成功后,可以通过 rpm - qa pcre pcre - devel 来查看是否安装成功
zlib
zlib 库提供了开发人员的压缩算法,在 Nginx 的各个模块中需要使用 gzip
压缩,所以我们也需要提前安装其库及源代码 zlib zlib-devel
可以使用命令 yum install - y zlib zlib - devel 来进行安装
安装成功后,可以通过 rpm - qa zlib zlib - devel 来查看是否安装成功
OpenSSL
OpenSSL 是一个开放源代码的软件库包,应用程序可以使用这个包进行
安全通信,并且避免被窃听。
SSL:Secure Sockets Layer 安全套接协议的缩写,可以在 Internet 上提供
秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在
Nginx 中,如果服务器需要提供安全网页时就需要用到 OpenSSL 库,所
以我们需要对 OpenSSL 的库文件及它的开发安装包进行一个安装。
可以使用命令 yum install - y openssl openssl - devel 来进行安装
安装成功后,可以通过 rpm - qa openssl openssl - devel 来查看是否安
装成功 上述命令,一个个来的话比较麻烦,我们也可以通过一条命令来进行安
yum install - y gcc pcre pcre - devel zlib zlib - devel openssl
openssl - devel 进行全部安装。
方案一: Nginx 的源码简单安装
(1) 进入官网查找需要下载版本的链接地址,然后使用 wget 命令进行下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
(2) 建议大家将下载的资源进行包管理
mkdir -p nginx/core
mv nginx-1.16.1.tar.gz nginx/core
(3) 解压缩
tar -xzf nginx-1.16.1.tar.gz
(4) 进入资源文件中,发现 confifigure
./configure
(5) 编译
make
(6) 安装
make install
方案二: yum 安装
使用源码进行简单安装,我们会发现安装的过程比较繁琐,需要提前准
GCC 编译器、 PCRE 兼容正则表达式库、 zlib 压缩库、 OpenSSL 安全通
信的软件库包,然后才能进行 Nginx 的安装。
(1)安装 yum-utils
sudo yum install -y yum-utils
(2)添加 yum 源文件
vim /etc/yum.repos.d/nginx.repo
  [nginx-stable]
name=nginx stable repo
  baseurl=http://nginx.org/packages/centos/$releasever/
$basearch/
  gpgcheck=1
  enabled=1
  gpgkey=https://nginx.org/keys/nginx_signing.key
  module_hotfixes=true
  [nginx-mainline]
  name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$re
leasever/$basearch/
  gpgcheck=1
  enabled=0
  gpgkey=https://nginx.org/keys/nginx_signing.key
  module_hotfixes=true
(3)查看是否安装成功
yum list | grep nginx

4 )使用 yum 进行安装 
yun install -y nginx
5 )查看 nginx 的安装位置
whereis nginx
(6)启动测试
源码简单安装和 yum 安装的差异:
这里先介绍一个命令 : ./nginx - V , 通过该命令可以查看到所安装 Nginx
的版本及相关配置信息。
简单安装

yum 安装

解压 Nginx 目录
执行 tar - zxvf nginx - 1.16.1.tar.gz 对下载的资源进行解压缩,进入
压缩后的目录,可以看到如下结构

内容解释:
auto: 存放的是编译相关的脚本
CHANGES: 版本变更记录
CHANGES.ru: 俄罗斯文的版本变更记录
conf:nginx 默认的配置文件
confifigure:nginx 软件的自动脚本程序 , 是一个比较重要的文件,作用如
下:
(1)检测环境及根据环境检测结果生成 C 代码
(2)生成编译代码需要的 Makefifile 文件
contrib: 存放的是几个特殊的脚本文件,其中 README 中对脚本有着详细
的说明
html: 存放的是 Nginx 自带的两个 html 页面,访问 Nginx 的首页和错误页
LICENSE: 许可证的相关描述文件
man:nginx man 手册
README:Nginx 的阅读指南
src:Nginx 的源代码
 
方案三 :Nginx 的源码复杂安装
这种方式和简单的安装配置不同的地方在第一步,通过 ./configure
对编译参数进行设置,需要我们手动来指定。那么都有哪些参数可以进
行设置,接下来我们进行一个详细的说明。
PATH: 是和路径相关的配置信息
with: 是启动模块,默认是关闭的
without: 是关闭模块,默认是开启的
我们先来认识一些简单的路径配置已经通过这些配置来完成一个简单的
编译:
--prefifix=PATH
  指向 Nginx 的安装目录,默认值为 /usr/local/nginx
--sbin-path=PATH
指向 ( 执行 ) 程序文件 (nginx) 的路径 , 默认值为 <prefix>/sbin/nginx
--modules-path=PATH
  指向 Nginx 动态模块安装目录,默认值为 <prefix>/modules
--conf-path=PATH
  指向配置文件 (nginx.conf) 的路径 , 默认值为
<prefix>/conf/nginx.conf
--error-log-path=PATH
  指向错误日志文件的路径 , 默认值为 <prefix>/logs/error.log
--http-log-path=PATH
  指向访问日志文件的路径 , 默认值为 <prefix>/logs/access.log
--pid-path=PATH
  指向 Nginx 启动后进行 ID 的文件路径,默认值为
<prefix>/logs/nginx.pid
--lock-path=PATH
指向 Nginx 锁文件的存放路径 , 默认值为 <prefix>/logs/nginx.lock
要想使用可以通过如下命令
./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock
在使用上述命令之前,需要将之前服务器已经安装的 nginx 进行卸载,卸
载的步骤分为三步骤:
步骤一:需要将 nginx 的进程关闭
./nginx -s stop
步骤二 : 将安装的 nginx 进行删除
rm -rf /usr/local/nginx
步骤三 : 将安装包之前编译的环境清除掉
make clean

2.5Nginx目录结构分析

在使用 Nginx 之前,我们先对安装好的 Nginx 目录文件进行一个分析,在
这块给大家介绍一个工具 tree ,通过 tree 我们可以很方面的去查看
centos 系统上的文件目录结构,当然,如果想使用 tree 工具,就得先通
yum install - y tree 来进行安装,安装成功后,可以通过执行 tree
/usr/local/nginx (tree 后面跟的是 Nginx 的安装目录 ) ,获取的结果如
下:

conf:nginx 所有配置文件目录
CGI(Common Gateway Interface) 通用网关【接口】,主要解决的问题
是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用
调用 CGI 【程序】处理及相应结果给客户端的一种标准规范。
fastcgi.conf:fastcgi 相关配置文件
fastcgi.conf.default:fastcgi.conf 的备份文件
fastcgi_params:fastcgi 的参数文件
fastcgi_params.default:fastcgi 的参数备份文件
scgi_params:scgi 的参数文件
scgi_params.default scgi 的参数备份文件
uwsgi_params:uwsgi 的参数文件
uwsgi_params.default:uwsgi 的参数备份文件
mime.types: 记录的是 HTTP 协议中的 Content-Type 的值和文件后缀名的
对应关系
mime.types.default:mime.types 的备份文件
nginx.conf: 这个是 Nginx 的核心配置文件,这个文件非常重要,也是我
们即将要学习的重点
nginx.conf.default:nginx.conf 的备份文件
koi-utf koi-win win-utf 这三个文件都是与编码转换映射相关的配置文
件,用来将一种编码转换成另一种编码
html: 存放 nginx 自带的两个静态的 html 页面
50x.html: 访问失败后的失败页面
index.html: 成功访问的默认首页
logs: 记录入门的文件,当 nginx 服务器启动后,这里面会有 access.log
error.log nginx.pid 三个文件出现。
sbin: 是存放执行程序文件 nginx
nginx 是用来控制 Nginx 的启动和停止等相关的命令。

2.6Nginx服务器启停命令

Nginx 安装完成后,接下来我们要学习的是如何启动、重启和停止 Nginx
的服务。
对于 Nginx 的启停在 linux 系统中也有很多种方式,我们本次课程介绍两
种方式:
1. Nginx 服务的信号控制
2. Nginx 的命令行控制
方式一 :Nginx 服务的信号控制
Nginx 中的 master worker 进程 ?
Nginx 的工作方式 ?
如何获取进程的 PID?
信号有哪些 ?
如何通过信号控制 Nginx 的启停等相关操作 ?
前面在提到 Nginx 的高性能,其实也和它的架构模式有关。 Nginx 默认采
用的是多进程的方式来工作的,当将 Nginx 启动后,我们通过 ps - ef |
grep nginx 命令可以查看到如下内容:

从上图中可以看到 ,Nginx 后台进程中包含一个 master 进程和多个 worker
进程, master 进程主要用来管理 worker 进程,包含接收外界的信息,并
将接收到的信号发送给各个 worker 进程,监控 worker 进程的状态,当
worker 进程出现异常退出后,会自动重新启动新的 worker 进程。而
worker 进程则是专门用来处理用户请求的,各个 worker 进程之间是平等
的并且相互独立,处理请求的机会也是一样的。 nginx 的进程模型,我们
可以通过下图来说明下:

我们现在作为管理员,只需要通过给 master 进程发送信号就可以来控制
Nginx, 这个时候我们需要有两个前提条件,一个是要操作的 master
程,一个是信号。
(1)要想操作 Nginx master 进程,就需要获取到 master 进程的进程
ID 。获取方式简单介绍两个,
方式一:通过 ps - ef | grep nginx
方式二:在讲解 nginx ./configure 的配置参数的时候,有一个参数
-- pid - path=PATH 默认是 /usr/local/nginx/logs/nginx.pid , 所以
可以通过查看该文件来获取 nginx master 进程 ID.
(2)信号

调用命令为 kill - signal PID
signal: 即为信号; PID 即为获取到的 master 线程 ID
1. 发送 TERM/INT 信号给 master 进程,会将 Nginx 服务立即关闭。
kill -TERM PID / kill -TERM `cat
/usr/local/nginx/logs/nginx.pid`
kill -INT PID / kill -INT `cat
/usr/local/nginx/logs/nginx.pid
2. 发送 QUIT 信号给 master 进程, master 进程会控制所有的 work 进程不
再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
kill -QUIT PID / kill -TERM `cat
/usr/local/nginx/logs/nginx.pid`
3. 发送 HUP 信号给 master 进程, master 进程会把控制旧的 work 进程不
再接收新的请求,等处理完请求后将旧的 work 进程关闭掉,然后根
nginx 的配置文件重新启动新的 work 进程
kill -HUP PID / kill -TERM `cat
/usr/local/nginx/logs/nginx.pid`
4. 发送 USR1 信号给 master 进程,告诉 Nginx 重新开启日志文件
kill -USR1 PID / kill -TERM `cat
/usr/local/nginx/logs/nginx.pid`
5. 发送 USR2 信号给 master 进程,告诉 master 进程要平滑升级,这个时
候,会重新开启对应的 master 进程和 work 进程,整个系统中将会有
两个 master 进程,并且新的 master 进程的 PID 会被记录
/usr/local/nginx/logs/nginx.pid 而之前的旧的 master 进程
PID 会被记录在 /usr/local/nginx/logs/nginx.pid.oldbin 文件
中,接着再次发送 QUIT 信号给旧的 master 进程,让其处理完请求后
再进行关闭
kill -USR2 PID / kill -USR2 `cat
/usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat
/usr/local/nginx/logs/nginx.pid.oldbin`

6. 发送 WINCH 信号给 master 进程 , master 进程控制不让所有的 work
进程在接收新的请求了,请求处理完后关闭 work 进程。注意 master
进程不会被关闭掉
kill -WINCH PID /kill -WINCH`cat
/usr/local/nginx/logs/nginx.pid`
方式二 :Nginx 的命令行控制
此方式是通过 Nginx 安装目录下的 sbin 下的可执行文件 nginx 来进行
Nginx 状态的控制,我们可以通过 nginx - h 来查看都有哪些参数可以
用:

 

-? -h: 显示帮助信息
-v: 打印版本号信息并退出
-V: 打印版本号信息和配置信息并退出
-t: 测试 nginx 的配置文件语法是否正确并退出
-T: 测试 nginx 的配置文件语法是否正确并列出用到的配置文件信息然后
退出
-q: 在配置测试期间禁止显示非错误消息
-s:signal 信号,后面可以跟 :
stop[ 快速关闭,类似于 TERM/INT 信号的作用 ]
quit[ 优雅的关闭,类似于 QUIT 信号的作用 ]
reopen[ 重新打开日志文件类似于 USR1 信号的作用 ]
reload[ 类似于 HUP 信号的作用 ]
-p:prefifix ,指定 Nginx prefifix 路径, ( 默认为 : /usr/local/nginx/)
-c:fifilename, 指定 Nginx 的配置文件路径 ,( 默认为 : conf/nginx.conf)
-g: 用来补充 Nginx 配置文件,向 Nginx 服务指定启动时应用全局的配置

2.7Nginx服务器版本升级和新增模块

如果想对 Nginx 的版本进行更新,或者要应用一些新的模块,最简单的
做法就是停止当前的 Nginx 服务,然后开启新的 Nginx 服务。但是这样会
导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们
就需要用到 Nginx 服务器提供的平滑升级功能。这个也是 Nginx 的一大特
点,使用这种方式,就可以使 Nginx 7*24 小时不间断的提供服务了。
接下来我们分析下需求:
需求: Nginx 的版本最开始使用的是 Nginx-1.14.2, 由于服务升级,需
要将 Nginx 的版本升级到 Nginx-1.16.1, 要求 Nginx 不能中断提供服
务。
为了应对上述的需求,这里我们给大家提供两种解决方案 :
方案一 : 使用 Nginx 服务信号完成 Nginx 的升级
方案二 : 使用 Nginx 安装目录的 make 命令完成升级
环境准备
(1)先准备两个版本的 Nginx 分别是 1.14.2 1.16.1
(2)使用 Nginx 源码安装的方式将 1.14.2 版本安装成功并正确访问
进入安装目录
./configure
make && make install
(3)将 Nginx1.16.1 进行参数配置和编译,不需要进行安装。
进入安装目录
./configure
make
方案一 : 使用 Nginx 服务信号进行升级
第一步 : 1.14.2 版本的 sbin 目录下的 nginx 进行备份
cd /usr/local/nginx/sbin
mv nginx nginxold
第二步 : Nginx1.16.1 安装目录编译后的 objs 目录下的 nginx 文件,拷贝
到原来 /usr/local/nginx/sbin 目录下
cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin
第三步 : 发送信号 USR2 Nginx 1.14.2 版本对应的 master 进程
第四步 : 发送信号 QUIT Nginx 1.14.2 版本对应的 master 进程
kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`
方案二 : 使用 Nginx 安装目录的 make 命令完成升级
第一步 : 1.14.2 版本的 sbin 目录下的 nginx 进行备份
cd /usr/local/nginx/sbin
mv nginx nginxold
第二步 : Nginx1.16.1 安装目录编译后的 objs 目录下的 nginx 文件,拷贝
到原来 /usr/local/nginx/sbin 目录下
cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin
第三步 : 进入到安装目录,执行 make upgrade

第四步 : 查看是否更新成功
./nginx -v
在整个过程中,其实 Nginx 是一直对外提供服务的。并且当 Nginx 的服务
器启动成功后,我们是可以通过浏览器进行直接访问的,同时我们可以
通过更改 html 目录下的页面来修改我们在页面上所看到的内容,那么问
题来了,为什么我们要修改 html 目录下的文件,能不能多添加一些页面
Nginx 的功能更加丰富,还有前面聊到 Nginx 的前端功能又是如何来实
现的,这就需要我们对 Nginx 的核心配置文件进行一个详细的学习。

三、Nginx核心配置文件结构

从前面的内容学习中,我们知道 Nginx 的核心配置文件默认是放
/usr/local/nginx/conf/nginx.conf ,这一节,我们就来学习下
nginx.conf 的内容和基本配置方法。
读取 Nginx 自带的 Nginx 配置文件,我们将其中的注释部分【学习一个技
术点就是在 Nginx 的配置文件中可以使用 # 来注释】删除掉后,就剩下下
面内容 :
worker_processes 1;
  events {
  worker_connections 1024;
  }
http {
  include mime.types;
default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
server {
  listen 80;
  server_name localhost;
  location / {
  root html;
  index index.html index.htm;
}
  error_page 500 502 503 504 /50x.html;
location = /50x.html {
  root html;
    }
   }
  }
  指令名 指令值 ; # 全局块,主要设置 Nginx 服务器整体运行的配置指令
#events , 主要设置 ,Nginx 服务器与用户的网络连接 , 这一部分对
Nginx 服务器的性能影响较大
  events {
  指令名 指令值 ;
  }
  #http 块,是 Nginx 服务器配置中的重要部分,代理、缓存、日志记录、
第三方模块配置 ...
http {
  指令名 指令值 ;
  server { #server 块,是 Nginx 配置和虚拟主机相关的内容
  指令名 指令值 ;
  location / {
  #location 块,基于 Nginx 服务器接收请求字符串与
location 后面的值进行匹配,对特定请求进行处理
  指令名 指令值 ;
  }
}
  ...
}
简单小结下 :
nginx.conf 配置文件中默认有三大块:全局块、 events 块、 http
http 块中可以配置多个 server 块,每个 server 块又可以配置多个 location
块。

3.1全局块

user 指令
(1) user: 用于配置运行 Nginx 服务器的 worker 进程的用户和用户组。

该属性也可以在编译的时候指定,语法如下 ./configure -- user=user
-- group=group , 如果两个地方都进行了设置,最终生效的是配置文件中
的配置。
该指令的使用步骤 :
(1) 设置一个用户信息 "www"
user www;

(2) 创建一个用户
useradd www
(3) 修改 user 属性
user www
(4) 创建 /root/html/index.html 页面,添加如下内容
<!DOCTYPE html>
  <html>
<head>
  <title> Welcome to nginx! </title>
  <style>
  body {
  width : 35em ;
  margin : 0 auto ;
  font-family : Tahoma , Verdana , Arial , sans-
serif ;
  }
  </style>
  </head>
<body>
  <h1> Welcome to nginx! </h1>
  <p> If you see this page, the nginx web server is
successfully installed and
  working. Further configuration is required. </p>
  <p> For online documentation and support please refer
to
  <a href = "http://nginx.org/" > nginx.org </a> . <br/>
  Commercial support is available at
<a href = "http://nginx.com/" > nginx.com </a> . </p>
  <p><em> Thank you for using nginx. </em></p>
  <p><em> I am WWW </em></p>
  </body>
  </html>
(5) 修改 nginx.conf
location / {
root /root/html;
index index.html index.htm;
}
(5) 测试启动访问
页面会报 403 拒绝访问的错误
(6) 分析原因
因为当前用户没有访问 /root/html 目录的权限
(7) 将文件创建到 /home/www/html/index.html , 修改配置
location / {
root /home/www/html;
index index.html index.htm;
}
(8) 再次测试启动访问
能正常访问。
综上所述,使用 user 指令可以指定启动运行工作进程的用户及用户组,
这样对于系统的权限访问控制的更加精细,也更加安全。
work process 指令
master_process: 用来指定是否开启工作进程。

worker_processes: 用于配置 Nginx 生成工作进程的数量,这个是 Nginx
服务器实现并发处理服务的关键所在。理论上来说 workder process
值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要
受到来自服务器自身的限制,建议将该值和服务器 CPU 的内核数保存一
致。

 

如果将 worker_processes 设置成 2 ,则会看到如下内容 :

其他指令
daemon :设定 Nginx 是否以守护进程的方式启动。
守护式进程是 linux 后台执行的一种服务进程,特点是独立于控制终端,
不会随着终端关闭而停止。

pid: 用来配置 Nginx 当前 master 进程的进程号 ID 存储的文件路径。

该属性可以通过 ./configure -- pid - path=PATH 来指定
error_log: 用来配置 Nginx 的错误日志存放路径

该属性可以通过 ./configure -- error - log - path=PATH 来指定
其中日志级别的值有:
debug|info|notice|warn|error|crit|alert|emerg ,翻译过来为试 |
| 通知 | 警告 | 错误 | 临界 | 警报 | 紧急,这块建议大家设置的时候不要设
置成 info 以下的等级,因为会带来大量的磁盘 I/O 消耗,影响 Nginx 的性
能。
(5) include: 用来引入其他配置文件,使 Nginx 的配置更加灵活

3.2events

(1)accept_mutex:用来设置Nginx网络连接序列化

这个配置主要可以用来解决常说的 " 惊群 " 问题。大致意思是在某一个时
刻,客户端发来一个请求连接, Nginx 后台是以多进程的工作模式,也
就是说有多个 worker 进程会被同时唤醒,但是最终只会有一个进程可以
获取到连接,如果每次唤醒的进程数目太多,就会影响 Nginx 的整体性
能。如果将上述值设置为 on( 开启状态 ) ,将会对多个 Nginx 进程接收连接
进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。
(2) multi_accept: 用来设置是否允许同时接收多个网络连接

如果 multi_accept 被禁止了, nginx 一个工作进程只能同时接受一个新的
连接。否则,一个工作进程可以同时接受所有的新连接
(3) worker_connections :用来配置单个 worker 进程最大的连接数

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能
的连接数。另外, number 值不能大于操作系统支持打开的最大文件句
柄数量。
(4) use: 用来设置 Nginx 服务器选择哪种事件驱动来处理网络消息。

注意:此处所选择事件处理模型是 Nginx 优化部分的一个重要内容,
method 的可选值有 select/poll/epoll/kqueue 等,之前在准备 centos
境的时候,我们强调过要使用 linux 内核在 2.6 以上,就是为了能使用
epoll 函数来优化 Nginx
另外这些值的选择,我们也可以在编译的时候使用
-- with - select_module -- without - select_module
-- with - poll_module -- without - poll_module 来设置是否需要将对应
的事件驱动模块编译到 Nginx 的内核。
events 指令配置实例
打开 Nginx 的配置文件 nginx.conf, 添加如下配置
events{
accept_mutex on;
multi_accept on;
worker_commections 1024;
use epoll;
}
启动测试
./nginx -t
./nginx -s reload

3.3http

定义 MIME-Type
我们都知道浏览器中可以显示的内容有 HTML XML GIF 等种类繁多的
文件、媒体等资源,浏览器为了区分这些资源,就需要使用 MIME
Type 。所以说 MIME Type 是网络资源的媒体类型。 Nginx 作为 web 服务
器,也需要能够识别前端请求的资源类型。
Nginx 的配置文件中,默认有两行配置
include mime.types;
default_type application/octet-stream;
(1) default_type: 用来配置 Nginx 响应前端请求默认的 MIME 类型。

default_type 之前还有一句 include mime.types ,include 之前我们已
经介绍过,相当于把 mime.types 文件中 MIMT 类型与相关类型文件的文
件后缀名的对应关系加入到当前的配置文件中。
举例来说明:
有些时候请求某些接口的时候需要返回指定的文本字符串或者 json 字符
串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用 nginx
速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并
且响应性能非常快。
如何实现 :
location /get_text {
# 这里也可以设置成 text/plain
default_type text/html;
return 200 "This is nginx's text";
}
location /get_json{
default_type application/json;
return 200 '{"name":"TOM","age":18}';
}
自定义服务日志
Nginx 中日志的类型分 access.log error.log
access.log: 用来记录用户所有的访问请求。
error.log: 记录 nginx 本身运行时的错误信息,不会记录用户的访问请
求。
Nginx 服务器支持对服务日志的格式、大小、输出等进行设置,需要使
用到两个指令,分别是 access_log log_format 指令。
(1) access_log: 用来设置用户访问日志的相关属性。

(2) log_format: 用来指定日志的输出格式。

其他配置指令
(1) sendfifile: 用来设置 Nginx 服务器是否使用 sendfifile() 传输文件,该属
性可以大大提高 Nginx 处理静态资源的性能

 

(2) keepalive_timeout: 用来设置长连接的超时时间。
》为什么要使用 keepalive
我们都知道 HTTP 是一种无状态协议,客户端向服务端发送一个 TCP 请求,
服务端响应完毕后断开连接。
如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,
效率相对来说比较多,使用 keepalive 模式,可以告诉服务器端在处理完
一个请求后保持这个 TCP 连接的打开状态,若接收到来自这个客户端的其
他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新
连接,提升效率,但是这个连接也不能一直保持,这样的话,连接如果过
多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时
间。

(3) keepalive_requests: 用来设置一个 keep-alive 连接使用的次数。

3.4server块和location

server 块和 location 块都是我们要重点讲解和学习的内容,因为我们后面
会对 Nginx 的功能进行详细讲解,所以这块内容就放到静态资源部署的
地方给大家详细说明。
本节我们主要来认识下 Nginx 默认给的 nginx.conf 中的相关内容,以及
server 块与 location 块在使用的时候需要注意的一些内容。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root html;
}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值