Nginx入门
前言
好记性不如烂笔头! 我对这句话越来越深信不疑了!大约3个月前陆陆续续学习了一些关于nginx的知识,当时都听懂了,但是课后没有练习,又加上长时间没用,导致关于nginx的知识全都还给了老师。昨天同事问我一个应该是很贱的问题,我居然回答不上来。于是顿感不安,赶紧捡起来重新学习,这次一定要记笔记!!!立帖为证。
1. nginx下载
nginx官网:http://nginx.org/
进入下载页面:
nginx历史版本下载地址:https://nginx.org/download/
特别注意: 我这里在虚拟机上安装了一台Centos7.6
版本的Linux系统,以后所有操作均在Linux系统上演示nginx的用法。
准备一个内核为2.6及以上版本的操作系统,因为linux2.6及以上内核才支持epoll,而Nginx需要解决高并发压力问题是需要用到epoll,所以我们需要有这样的版本要求。
我们可以使用 uname -a
命令来查询linux的内核版本。
建议大家把防火墙都关闭掉,因为把防火墙关闭掉,可以省掉后续Nginx学习过程中遇到的诸多问题。
关闭的方式有如下两种:
systemctl stop firewalld
关闭运行的防火墙,系统重新启动后,防火墙将重新打开;systemctl disable firewalld
永久关闭防火墙,,系统重新启动后,防火墙依然关闭。
查看防火墙状态的命令:
systemctl status firewalld
这里我把防火墙给关闭了。
确认停用selinux
selinux(security-enhanced linux),美国安全局对于强制访问控制的实现,在linux2.6内核以后的版本中,selinux已经成功内核中的一部分。可以说selinux是linux史上最杰出的新安全子系统之一。虽然有了selinux,我们的系统会更安全,但是对于我们的学习Nginx的历程中,会多很多设置,所以这块建议大家将selinux进行关闭。
首先查看selinux的状态:sestatus
我这里已经停用了selinux,若不是请使用以下命令修改:vim /etc/selinux/config
和Windows系统一样,在Linux系统中,文件的存放位置也不是随便的。因此我先在家目录~
下创建目录~/nginx/core
,然后使用wget
命令直接将nginx下载到该目录中:
如上图所示,nginx已经下载。
然后对下载的nginx安装包进行解压:
解压之后再次查看core目录发现多了个文件夹:
接下来的安装就要使用到我们解压之后的文件夹了。
2. nginx安装
nginx安装有3种:
- 通过Nginx源码安装(2种):
1.1 通过Nginx源码简单安装 ;
1.2 通过Nginx源码复杂安装 。 - 通过yum安装 。
2.0 安装之前的准备工作
如果通过Nginx源码安装需要提前准备的内容:
2.0.1 GCC编译器
Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。
安装命令:yum install -y gcc
查看是否安装成功命令:gcc --version
2.0.2 PCRE兼容正则表达式库
Nginx在编译过程中需要使用到PCRE库(perl Compatible RegularExpressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。
安装命令: yum install -y pcre pcre-devel
查看是否安装成功命令: rpm -qa pcre pcre-devel
2.0.3 zlib压缩库
zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel。
安装命令: yum install -y zlib zlib-devel
查看是否安装成功命令: rpm -qa zlib zlib-devel
2.0.4 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 opensslopenssl-devel
2.0.5 关闭防火墙
我们在使用Nginx的时候,要先关闭Linux系统的防火墙,否则在虚拟机上安装好Nginx之后,虚拟机本地可以访问,但是我们在本机上访问不到的。
命令:
systemctl status firewalld
:查看防火墙状态;
systemctl stop firewalld
:临时关闭防火墙,下次开机防火墙还是会自动启动;
systemctl disable firewalld
:永久关闭防火墙,下次开机也不会启动。
若要重新启用防火墙,使用命令:systemctl enable firewalld
。
2.1 通过源码简单安装
将下载的压缩包进行解压,解压命令:tar -zxvf nginx-1.22.1.tar.gz
解压之后的得到文件夹nginx-1.22.1。接下来进入已解压的nginx文件夹:
config是一个二进制的可执行文件。我们通过以下命令完整nginx的安装。
在该文件夹下执行3个命令:
- 配置:
./configure
;
当出现以下内容则表明configure
命令执行成功:
- 编译:
make
; - 安装:
make install
其中2、3命令可以合并执行,命令为:make && make install
至此,通过源码简单安装完成。
这里有个疑问:通过源码简单安装之后,nginx被安装到了哪个目录呢?
答:若我们使用通过源码简单安装的方式安装nginx,默认安装到 /usr/local/nginx目录下:
sbin文件夹中存放的是对nginx执行操作的具体命令。
启动nginx:
进入到sbin目录下,执行命令:
启动nginx命令:./nginx
输入启动nginx的虚拟机Linux的主机地址,我这里为:192.168.25.138
,可以看到如下页面:
nginx默认代理的是80端口,而若主机地址是80可以不输入。
至此,通过源码简单安装的方式安装nginx成功!
2.2 通过源码复杂安装
同样都属于nginx源码安装,但是复杂安装还是有一些区别的。通过源码简单安装执行命令./configure
时没有带任何参数,但是复杂安装时,我们要手动指定一些编译参数,一般可以设置的参数如下:
- PATH:是和路径相关的配置信息;
- with:是启动模块,默认是关闭的;
- without:是关闭模块,默认是开启的。
通过源码复杂安装中针对./configure
的说明:
上图展示了很多使用./configure --XXX
的命令。实际上通过命令./configure
我们可以 - 指定nginx的安装路径、日志路径等关于路径的设定;
- 添加一些第三方模块,扩展nginx的功能;
- 移除一些模块,去除nginx不用的模块,减小nginx的体积。
对一些具体编译命令的说明:
--prefix=PATH
:指向Nginx的安装目录,默认值为/usr/local/nginx;
--sbin-path=PATH
:指向(执行)程序文件(nginx)的路径,默认值为/sbin/nginx;
--modules-path=PATH
:指向Nginx动态模块安装目录,默认值为/modules;
--conf-path=PATH
:指向配置文件(nginx.conf)的路径,默认值为/conf/nginx.conf;
--error-log-path=PATH
:指向错误日志文件的路径,默认值为/logs/error.log;
--http-log-path=PATH
:指向访问日志文件的路径,默认值为/logs/access.log;
--pid-path=PATH
:指向Nginx启动后进行ID的文件路径,默认值为/logs/nginx.pid;
--lock-path=PATH
:指向Nginx锁文件的存放路径,默认值为/logs/nginx.lock。
因此,复杂安装与简单安装步骤除了执行./configure
不同外,别的都相同。使用复杂安装来安装nginx时,指定一些编译参数:
./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
2.3 通过yum安装
使用源码进行简单安装,我们会发现需要提前安装的东西太多,而且安装的过程也比较繁琐。但是使用yum进行安装会简单很多。
使用yum安装nginx的步骤:
- 安装yum-utils:
sudo yum install -y yum-utils
; - 添加yum源文件:
vim /etc/yum.repos.d/nginx.repo
,将以下文件粘贴到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
我们通过yum安装的方式安装nginx的官网安装步骤http://nginx.org/en/linux_packages.html#RHEL是一致的:
注意,在官网查找yum安装nginx时,由于我是在centos把版本的Linux系统上安装nginx,因此选择下面这个
保存并退出。
3. 查看nginx是否配置成功:yum list | grep nginx
;
4. 使用yum安装nginx:sudo yum install -y nginx
;其中-y
代表安装过程中的yes/no我们一律自动选择yes.
5. 通过1、2、3、4步骤就安装好了nginx,查看nginx的安装位置:where is nginx
,此命令在使用源码进行简单安装时,命令不起作用。
使用yum安装nginx之后,启动nginx,命令:./nginx
源码简单安装与yum安装的区别:
我们通过命令:./nginx -V
来查看安装的nginx的版本及相关配置信息。
yum安装:
简单装:
也就是说,yum安装比简单安装要多出许多配置的信息,比如指定安装目录,错误日志存放路径等等。
在windows操作平台下,查看nginx的PID命令:
tasklist /fi "imagename eq nginx.exe"
3. nginx卸载
卸载nginx有3步:
步骤一:需要将nginx的进程关闭:进入到nginx的安装目录,我这里将nginx安装在目录**/usr/local/nginx下,进入到安装目录的sbin文件夹下执行命令:./nginx -s stop
;
步骤二:将安装的nginx删除:我这里回到/usr/local**目录下,删除nginx,命令:rm -rf /usr/local/nginx
;
步骤三:进入到解压之后的nginx文件夹,将安装包之前编译的环境清除:make clean
。
4. nginx目录
我们要清楚在linux环境下,nginx目录包括从nginx官网下载安装压缩包并对其解压之后得到的文件夹和安装nginx之后得到的安装文件夹。
4.1 nginx解压文件夹目录
进入到我们从nginx官网下载的压缩包的解压之后的文件夹下:
nginx解压文件夹目录说明:
auto
:存放的是编译相关的脚本
CHANGES
:版本变更记录
CHANGES.ru
:俄罗斯文的版本变更记录
conf:nginx
:默认的配置文件
configure
:nginx软件的自动脚本程序,是一个比较重要的文件,作用如下:
(1)检测环境及根据环境检测结果生成C代码
(2)生成编译代码需要的Makefile文件
contrib
:存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明
html
:存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面
LICENSE
:许可证的相关描述文件
man
:nginx的man手册
README
:Nginx的阅读指南
src
:Nginx的源代码
注意:Makefile
和objs
是我们使用源码简单安装时,执行./configure
命令之后产生的文件。
4.2 nginx安装文件夹目录
这里为了更清楚的展示nginx安装之后的文件夹目录,我们使用linux中常用的tree工具,可以更好地展示文件目录结构。
首先安装tree工具:yum install -y tree
来安装tree工具。
安装后执行命令:tree /usr/local/nginx
(tree后面跟的是nginx的安装目录,这里是默认的安装目录),结果如下:
对nginx安装目录的说明:
conf
:nginx所有配置文件目录;
CGI(Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。
astcgi.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的启动和停止等相关的命令。
在linux中使用'命令XXX'
可以将 `` 内的内容作为参数向外传递。
注意:符号 ` 是键盘上按键 Esc下面的那个按键!!!
WINCH
会关闭worker进程,不会关闭master进程,而QUIT
会关闭worker和master进程。
5. Nginx服务器启停命令
启动Nginx服务的方式只有一种那就是进入到Nginx安装目录/usr/local/nginx/sbin
下执行命令:
./nginx
才会启动Nginx服务,启动服务之后对服务的控制分为两种方式:
- 通过Nginx服务的信号来控制Nginx的关闭,更新等操作;
- 通过Nginx服务的命令控制。
5.1 Nginx服务的信号控制
目录 /usr/local/nginx/sbin/ 下的 nginx 是一个可执行的二进制文件。我们使用该文件启动nginx服务。
命令:./nginx
:启动Nginx服务。
5.1.1 Nginx中的master和worker进程
Nginx的高性能,和它的架构模式有关。Nginx默认采用多进程的方式工作,当Nginx启动以后,通过命令:
ps -ef | grep nginx
查看到以下内容:
上图中有一个master进程和一个worker进程,但实际上Nginx中,master进程只有一个,worker进程可以有多个。
master进程:在Nginx服务中只有1个负责接收管理员的命令和信号,管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程;
worker进程:负责处理用户的请求,可以存在多个。各个worker进程之间是相互独立,处理请求的机会也是相等的。
5.1.2 Nginx的工作方式
我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx。
5.1.3 如何获取Nginx进程的PID
要想操作Nginx的master进程,就需要获取到master进程的进程号ID。获取方式简单介绍两个:
方式1:ps -ef | grep nginx
;
方式2:在讲解nginx的 ./configure
的配置参数的时候,有一个参数是 --pid-path=PATH
默认是 /usr/local/nginx/logs/nginx.pid ,所以可以通过查看该文件来获取nginx的master进程ID.
通过上面2种方式查看到的Nginx的master的PID是一样的。
5.1.4 Nginx中的信号
我们就是要利用这些信号来控制Nginx。
命令:kill -信号XXX master进程的PID
:这里的kill
不能简单地理解为杀死或关闭,而是调用Nginx的某个信号完成信号对应的操作。
5.1.4.1 TERM/INT信号
发送TERM/INT信号给master进程,会将Nginx服务立即关闭。
命令:kill -TERM master进程PID
例如使用TERM
信号关闭Nginx服务:
关闭之后,发现Nginx服务的master进程和worker进程确实都被关闭了。
5.1.4.2 QUIT信号
发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
命令:kill -QUIT master进程PID
5.1.4.3 HUP信号
发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程。
命令:kill -HUP master进程PID
注意:使用HUP
信号不会关闭Nginx的master进程!
5.1.4.4 USR1信号
发送USR1信号给master进程,告诉Nginx重新开启日志文件。这里的重新打开是重新生成的意思。
命令:``
比如我们把目录 nginx安装目录 logs/ 下的 access.log 和 error.log文件都删除后,执行USR1
信号之后:
注意:使用USR1
信号不会关闭Nginx的master进程!
5.1.4.5 USR2信号
发送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 master进程PID
:执行USR2
信号,平滑升级
执行上述命令之后,在 /usr/local/nginx/logs/ 目录下会出现 nginx.pid.oldbin 文件:
此时要将旧master进程的PID关闭掉:
kill -QUIT master进程的PID
,这里执行的命令是:
旧master进程的PID已经被关闭了。
USR2
信号通常用来对Nginx版本进行升级或者新增模块的时候使用。
5.1.4.6 WINCH信号
发送WINCH
信号给master进程,让master进程通知所有的worker进程不再接收新的请求,处理完所有请求后关闭worker进程。
命令:kill -WINCH master进程PID
注意:使用WINCH
信号不会关闭master进程!
5.2 Nginx服务的命令控制
此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,我们可以通过命令来查看都有哪些参数可以用:
进入到Nginx安装目录:/usr/local/nginx/sbin 目录下,执行命令:
./nginx -h
内容如下:
命令:./nginx -【选项】
中的选项释义:
-?
和-h
:显示帮助信息
-v
:打印版本号信息并退出
-V
:打印版本号信息和配置信息并退出
-t
:测试nginx的配置文件语法是否正确并退出
-T
:测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后
退出
-q
:在配置测试期间禁止显示非错误消息
-s
:signal信号,后面可以跟 :
stop
:快速关闭,类似于TERM/INT信号的作用,例如./nginx -s stop
;quit
:优雅的关闭,类似于QUIT信号的作用,例如./nginx -s quit
;reopen
:重新打开日志文件类似于USR1信号的作用,例如./nginx -s reopen
;reload
:该命令类似于HUP
信号的作用,作用是重新读取并加载配置文件nginx.conf,例如./nginx -s reload
。
-p
:prefix,指定Nginx的prefix路径,(默认为: /usr/local/nginx/)
-c
:filename,指定Nginx的配置文件路径,(默认为: conf/nginx.conf)
-g
:用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置
就经验而言,使用Nginx的命令对Nginx服务进行操作通常是我们在工作中的首选!
6. Nginx服务器版本升级和新增模块
如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。但是这样会导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。
对于Nginx版本升级和新增模块,这里提供2种解决方案:
- 使用Nginx服务信号控制完成;
- 使用Nginx安装目录的make命令完成。
这里使用方案1,以Nginx版本升级为例,介绍如何将Nginx升级到指定版本。
首先查看当前Nginx的版本:
从图中得知:Nginx的版本为1.22.1,我准备将其升级到1.23.3。
对于当前系统中已经安装的1.22.1版本的Nginx,我们先不管,准备好1.22.3版本的Nginx:
进入1.22.3版本的压缩包解压之后的文件目录nginx-1.23.3中,执行命令对1.23.3版本进行配置和编译,不需要进行安装:
第一步:
-
进入1.23.3的解压目录;
-
执行配置命令:
./configure
;
-
执行编译命令:
make
。
第二步:
将旧版本1.22.1的sbin目录下的nginx进行备份:
第三步:
将1.23.3解压目录中编译后的objs目录下的nginx文件,复制到当前1.23.1版本的Nginx的安装后的目录**/usr/local/nginx/sbin**目录下:
第四步:
发送USR2
信号给1.23.1(旧版本)对应的master进程:
第五步:
发送QUIT
信号给1.23.1(旧版本)的master进程。
第六步:
此时访问nginx页面,还可以访问,且查看nginx版本:
发现已经升级到了1.23.3。最后删除第二步中备份的nginx文件:
到这里,Nginx的版本升级成功完成!
若使用Nginx命令的方式对Nginx进行版本升级:
第一步,第二步,第三步和使用信号控制的方式都相同。
第四步:
进入到1.23.3压缩包解压后的目录nginx-1.23.3目录下,执行命令:
make upgrade
第五步:
查看版本是否更新成功。
其实无论使用哪种方案对Nginx进行版本升级,实际上在整个过程中,Nginx是一直对外提供服务的。并且当Nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的。
7. Nginx核心配置文件
从前面的内容学习中,我们知道Nginx的核心配置文件默认是放在 /usr/local/nginx/conf/nginx.conf ,本章主要讲述 nginx.conf 的内容和基本配置方法。
读取Nginx自带的Nginx配置文件,我们将其中的注释部分【学习一个技术点就是在Nginx的配置文件中可以使用 #
来注释】删除掉后,就剩下下面内容:
nginx.conf 配置文件中默认有三大块:全局块、events块、http块。
7.1 全局块
全局块,主要设置Nginx服务器整体运行的配置指令。格式一般为:
指令名 指令值;
。
比如:worker_processes 1;
7.1.1 user指令
user指令用于配置运行Nginx服务器的worker进程的用户和用户组。注意:这里的用户和用户组指的是Linux系统中的用户和用户组。
该属性也可以在编译的时候指定,语法如下 ./configure --user=userXXX --group=groupXXX
,如果两个地方都进行了设置,最终生效的是配置文件中的配置。
举例演示如何使用user指令:
- 在Linux系统中创建一个用户jack:
useradd jack
- 在配置文件 nginx.conf 的全局块中添加如下信息:
- 创建文件 /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 jack</em></p>
</body>
</html>
- 修改 nginx.conf :
- 重启nginx,访问Linux80端口地址,例如我的地址:http://192.168.25.144/出现如下错误:
原因分析:
如上图所示,nginx的master主进程将请求交给worker进程来处理,worker进程发现用户访问index.html 页面,于是就按照 nginx.conf 中的对应的server块中配置的路径查找资源,但是由于worker进程所属用户是 jack ,而 jack 作为普通用户,没有访问 /root/html目录的权限,因此才出现5中的错误!
解决办法:我们只需要将 index.html 文件创建到用户 jack 所在的 /home/jack/html 目录下,然后修改server块中的location配置即可。
修改location中的配置:
最后别忘记重新加载配置文件:
就可以成功看到以下内容:
7.1.2 worker_processes指令
用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在。理论上来说worker processes
的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该worker processes
的值和服务器CPU的内核数保存一致。
查看worker进程:
发现和配置文件中配置的个数一致!
7.1.3 master_process指令
master process
用来指定是否开启工作进程。
默认的配置文件中没有配置master_process
指令,是因为nginx会使用默认配置,我们不配置master_process
,它的默认值就是 on:开启。
例如配置master_process
的值为 off:关闭:
重启nginx,会发现只有一个master进程:
此时,80端口地址也是访问不了的,因为没有worker进程可用于处理请求了!所以master_process
通常使用默认配置。
7.1.4 daemon指令
daemon
用于设定Nginx是否以守护进程的方式启动。
守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。
7.1.5 pid指令
用来配置Nginx当前master进程的进程号ID存储的文件路径。
其实,查看Linux后台nginx进程pid与nginx的存放pid的文件中存放的pid值是相同的:
该属性还可以通过 ./configure --pid-path=路径XXX
来指定。
7.1.6 error_log指令
error_log
指令用来配置Nginx的错误日志存放路径。
该属性可以通过 ./configure --error-log-path=路径XXX
来指定。
其中日志级别的值有:
debug|info|notice|warn|error|crit|alert|emerg
,翻译过来为
调试|信息|通知|警告|错误|临界|警报|紧急
,这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能。
7.1.7 include指令
include
指令用来引入其他配置文件,使Nginx的配置更加灵活。
7.2 events块
events块,主要设置,Nginx服务器与用户的网络连接,这一部分对
Nginx服务器的性能影响较大
# event块
events {
指令名 指令值;
}
7.3 http块
http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置…
# http块
http {
指令名 指令值;
#server块,是Nginx配置和虚拟主机相关的内容
server {
指令名 指令值;
#location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
location / {
指令名 指令值;
}
}
...
}
http块中可以配置多个server块,每个server块又可以配置多个location块。