Nginx的的目录结构,基本运行原理及常用命令
一、nginx的目录
使用tree工具,可以以树形结构的方式查看任何一个目录。当然,如果要想使用tree工具,就得通过yum install -y tree
来进行安装,安装成功后,可以通过执行tree /usr/local/nginx
(tree后面跟的是Nginx的安装目录),获取的结果如下:
- 查看
mime.types
文件内容(部分)
- 查看
logs
目录
-
查看
access.log
,每次请求,都会被写入到该文件中。
-
查看
error.log
,存放错误日志文件。 -
查看
nginx.pid
存放主进程的进程号。
- html目录存放的是静态页面
50x.html
是发生错误展示的页面,index.html
是默认的访问页面。可以在该目录下新建html
,然后在浏览器中访问,例如在该目录下新建lss.html
,内容是我坐在九千个日落里 望向白鸟衔玫瑰飞去~
,然后访问:http://192.168.38.128/lss.html
,结果如下:
nginx.conf
配置文件(重点!!!)
下篇单独讲解。
二、Nginx服务器的启停命令
Nginx
安装完成后,如何启动、重启和停止Nginx
服务呢?对于Nginx的启动在linux系统中也有很多方式,在这里会介绍两种方式:
- Nginx服务的信号控制
- Nginx的命令行控制
方式一:Nginx服务的信号控制
Nginx
采用的是多进程的方式来工作的([Master-worker
),Nginx
启动后,通过ps -ef | grep nginx
命令可以看到如下内容:
Nginx
后台进程中包含一个master进程
和多个worker进程(目前只有一个,需要在nginx.conf配置文件中进行配置)
,master进程
主要用来管理worker进程
,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态
,当worker进程出现异常退出后
,会自动重新启动新的worker进程
。而worker进程
则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立
,处理请求的机会也是一样的。nginx的进程模型:
我们作为管理员,只需要通过给master进程发送信号就可以来控制Nginx
,这个时候我们需要有两个前提条件,一个是要操作的master进程
,一个是信号
。
- 要想操作Nginx的master进程,就需要获取到master进程的进程号ID。获取方式简单介绍两个:
方式一:通过ps -ef | grep nginx
;
方式二:/usr/local/nginx/logs/nginx.pid
,可以通过查看该文件来获取nginx的master进程ID.
- 信号
调用命令为kill -signal PID
。signal
即为信号;PID
即为获取到master进程
的ID
。
-
发送
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`
-
发送
QUIT信号
给master进程
,master进程会控制所有的work进程不再接收新的请求
,等所有请求处理完后,在把进程都关闭掉。kill -QUIT PID 或 kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
-
发送
HUP信号给master进程
,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程(master进程不变,可以看到master进程号还是原来的)。kill -HUP PID 或 kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
-
发送USR1信号给master进程,告诉Nginx重新开启日志文件。
kill -USR1 PID / kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
-
发送
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`
-
发送
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的配置文件语法是否正确并退出
在nginx.conf
配置文件中,随便配置一串字母hhhh
使,配置文件出错,然后在sbin
目录下执行命令:./nginx -t
去掉错误配置,再次执行:
-
s
:singal信号(常用)
1. 快速关闭(Nginx服务立即关闭),类似于TERM/INT信号的作用。
./nginx -s stop
2. 优雅的关闭(master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉), 类似于QUIT信号的作用
./nginx -s quit
3. reopen[重新打开日志文件类似于USR1信号的作用]
./nginx -s reopen
4. reload 类似于HUP信号的作用(master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程,在后面修改了`nginx.conf`配置文件后,无需重新启动,直接执行改命令即可)
./nginx -s reload
5.指定Nginx的配置文件路径,(默认为: /usr/local/nginx/conf/nginx.conf)
./nginx -c /usr/local/nginx/conf/nginx.conf
-
./nginx -s stop
进行关闭(若将nginx注册过服务也可执行systemctl stop nginx.service
,如何将nginx注册为服务看这里01-nginx的安装与卸载
-
./nginx -c /usr/local/nginx/conf/nginx.conf
1 、 执行下面命令,将Nginx的配置文件
nginx.conf
复制一份到/opt/
下:cp /usr/local/nginx/conf/nginx.conf /opt/
2、使用命令vim nginx.conf
,更改配置文件,然后保存并推出。
3、进入到nginx的sbin
目录下
4、执行./nginx -c /opt/nginx.conf
命令来执行我们复制过的配置文件。发现可以通过./nginx -c nginx.conf文件的位置
来指定nginx执行哪个配置文件。
三、Nginx配置成系统服务与Nginx命令配置到系统环境
经过前面的操作,如果想要启动、关闭或重新加载nginx配置文件,都需要先进入到nginx的安装目录的sbin目录,然后使用nginx的二进制可执行文件(sbin
)来操作,相对来说操作比较繁琐,这块该如何优化?另外如果我们想把Nginx设置成随着服务器启动就自动完成启动操作,又该如何来实现?这就需要用到接下来我们要讲解的两个知识点:
- Nginx配置成系统服务
- Nginx命令配置到系统环境
3.1 Nginx配置成系统服务
3.2 Nginx命令配置到系统环境
前面使用过Nginx安装目录下的二进制可执行文件nginx
的很多命令,要想使用这些命令前提是需要进入sbin目录下才能使用,很不方便,如何去优化,我们可以将该二进制可执行文件加入到系统的环境变量,这样的话在任何目录都可以使用nginx对应的相关命令。具体实现步骤如下:
-
修改
etc/profile
文件vim /etc/profile 在最后一行添加(vim中执行G直接跳到文件尾部) export PATH=$PATH:/usr/local/nginx/sbin
-
使修改后的文件生效
source /etc/profile
-
在任何目录都可以执行nginx命令了
nginx -v