本篇教程不包含安装过程,需要安装请自行google或者参考官方文档
本篇教程包括:
- 启动和停止nginx、以及重载nginx配置
- nginx配置文件说明
- 如何配置nginx提供静态内容服务
nginx是一款高性能高并发的web服务器,工作方式为一个master进程加多个worker进程。master进程主要负责解析配置文件、管理worker进程。worker进程才实际处理请求。nginx采用基于事件驱动的模型,依赖于操作系统的机制在worker进程间高效的分发请求。worker进程数可以在配置文件中定义,一般建议配置为操作系统可用的cpu核数。
查看 worker processes 了解worker进程配置方法。
nginx及其模块的工作方式取决于配置文件的配置。在默认情况下,配置文件名称是nginx.conf,一般存放在 /usr/local/nginx/conf 或者 /etc/nginx 或者 /usr/local/etc/nginx 目录下。
启动和停止nginx、以及重载nginx配置
要启动nginx的话,直接运行nginx可执行文件,最好把执行文件路径配置到环境变量中。启动nginx后,可以通过使用 -s 加上一系列指令来控制nginx。
例如:
nginx -s stop #立刻停止nginx
nginx -s quit #安全停止nginx(等worker进程完成处理中的请求后再退出)
nginx -s reload #修改nginx.conf后使用该命令使配置生效
nginx -s reopen #重新打开日志文件
需要注意的是:运行这些命令的用户必须和启动nginx的用户一致。
这里讲一下reload指令。master进程收到reload指令时,首先会检查新的配置文件的语法有效性并尝试应用其中的配置。如果没问题,master进程会启动一批新的worker进程,然后发送shutdown命令给老的worker进程;否则,master进程将回滚修改并继续使用旧的配置工作。老的worker进程在收到master进程的shutdown命令后,将会拒绝新的连接,并在处理完成剩余的请求后退出。nginx通过这种方式实现热部署。
还有一个安全停止nginx的方法:
kill -s QUIT PID #PID为master进程id
master进程id默认会被写入到 /usr/local/nginx/logs 或者 /var/run 目录下的nginx.pid文件中,如果是macos下通过homebrew安装的nginx,那么nginx.pid文件应该在/usr/local/var/run目录中。
通过ps命令查看正在运行的nginx进程:
ps -aux | grep nginx
查看 Controlling nginx 了解更多nginx控制指令。
nginx配置文件说明
nginx由多个模块组成,这些模块由配置文件中指定的指令控制。nginx中的指令分为两种,简单指令和模块指令。
- 简单指令
由名称和参数组成,使用空格分割,分号结尾。比如:
worker_processes 1; #worker进程数为1
- 模块指令
由名称和一个 {} 组成,{} 中可以包含简单指令,也可以嵌套模块指令。比如:
events {
worker_connections 1024;
}
http {
server {
location / {
root /usr/local/var/www;
}
location /images {
root /usr/local/var/www;
}
}
}
如果模块指令的{}中包含其他指令,我们称之为上下文。就拿上面的配置来说,events、http、server、location都叫做上下文。nginx的配置是有上下文层级关系的。最外层的称为 main context 主上下文,main包含events和http等,http包含server,server包含location。
如何配置nginx提供静态内容服务
web服务器的一个重要特性就是提供静态内容服务(比如图片,HTML网页)。下面开始实战:
先准备一些静态资源
mkdir /usr/local/var/www #存放html网页文件
mkdir /usr/local/var/images #存放一些图片
cd /usr/local/var/www
echo '<html><body>Hello Nginx!</body></html>' > hello.html
你可以使用任意的目录,不需要和我一致。然后打开nginx.conf,这个文件默认会有一堆配置,我们全部删掉,改为如下配置:
http {
server {
#默认监听80端口
location / {
root /usr/local/var/www;
}
location /images/ {
root /usr/local/var;
}
}
}
location
用来匹配请求url,/ 表示匹配所有请求(当其他location都无法匹配时),/images/ 表示匹配url前缀是/images/的请求。如果一个请求url匹配了多个location,nginx会选择最长前缀匹配的location。
root
root后面的参数表示本地文件系统路径,将root path和location path组合在一起,就是你要访问的资源所在目录。比如:在浏览器请求http://localhost/images/1.png,那么location /images/ 就会匹配上这个请求,然后nginx会去读取/usr/local/var/images/1.png这个文件返回给浏览器。如果文件不存在,nginx会返回404。
好了,现在我们启动一下nginx(需要先配置好环境变量)
sudo nginx
如果你之前已经启动过,那么使用
sudo nginx -s reload
打开浏览器,访问http://localhost/hello.html将会看到Hello Nginx!。如果你在/images/下放置了一些图片,访问http://localhost/images/xxx.img即可。