Nginx译文

Nov 4, 2018

今天在学习大数据方面的知识,听说Nginx在有些方面比Apahce好,但是也不知道是哪里好,于是,去官网看看吧。作者是俄国人,自然有俄文,中俄关系这么好,应该也有中文吧!呀呵,没有中文啊,咋整呢?
翻译吧!当然,我也不懂俄文,还好他们有英文版的,OK了,那就试试翻译一下英文,大家试试看咋样,行不?
源文出处:
http://nginx.org/en/docs/beginners_guide.html

####Beginner’s Guide(新手导引)
nginx启动时有一个主进程(master process)和一些工作进程(work process)。主进程一般用来读取和检测维护配置信息,管理工作进程。而工作进程才是实际做事处理客户端请求的家伙。
nginx使用基于事件的模型和操作系统平台依托的机制来有效地分发客户端的请求给工作进程。
工作进程的数量可以在配置文件设定中,也可以根据既定的配置项来修正,或者也可以根据实际CPU核数进行自适应调整
nginx的工作方式和模块情况取决于它的配置文件nginx.conf,而它的配置文件一般在/usr/local/nginx/conf,/etc/nginx或者/usr/local/etc/nginx目录里

####启动,停止,重读配置信息
要启动nginx,只需执行安装时自带的可执行文件就行了。

1
/usr/sbin/nginx

一旦启动了nginx,就可以通过调用可执行文件并加上参数来控制

1
/usr/sbin/nginx -s signal

signal参数有:

1
2
3
4
stop 快速停止
quit 优雅(从容)地停止
reload 重读配置信息(平滑重启)
reopen 重开日志文件

比如,当你想在当前的工作进程(work process)处理完手上的请求后关闭nginx,那么你可以使用下面的命令

1
/usr/sbin/nginx -s quit

注意,执行这个命令的用户要和启动nginx的用户是同一个。
如果你修改了配置信息,你必须重启nginx或者重读配置信息才能使得刚刚修改的配置生效,重读配置信息,就执行下面的命令

1
/usr/sbin/nginx -s reload

一旦主进程接收到上述信号,则会尝试解析配置文件的语法并读取配置信息,如果执行成功,主进程会生成新的工作进程并向旧的工作进程发送停止信号。如果执行失败,则主进程回滚配置信息,原有的工作进程继续工作。工作进程在接收到主进程的停止信号后,不再接收新的连接但是会把手上的请求处理完后才停止。

在类Unix系统平台上也可以通过kill命令向nginx发送类似的信号,这时的信号一般是直接发送给nginx进程,用进程ID来表示。nginx的主进程ID一般是写在nginx.pid文件中,所在目录可能是/var/run/(可配置)。比如当前nginx主进程的进程ID是1628,那么如果我想从容停止掉nginx,那么我应该这么做:

1
kill -s QUIT 1628

快速地停止nginx:

1
kill -s TERM 1628

平滑地重启nginx:

1
kill - HUP 1628

为了获得当前运行的nginx的进程的信息,可以执行下述的命令:

1
ps -ax | grep nginx

更多信息还是参考Nginx进程控制

####配置文件的结构
nginx也是基于模块的,而模块的功能在配置文件中就是所谓的指令(directive)了。
指令包含简单指令和块级指令。

简单指令就是指令名和指令值,中间用空格隔开,使用分号(;)结束。

块级指令的结构与简单指令一样,只是不是使用分号(;)结束,而是使用大括号({})结束。如果块级指令还能在大括号里包含简单指令,那么此时的块级指令也有另一个称谓:上下文(比如events,http,server和location)。

处在配置文件里,块级指令之外的环境称之为主上下文(main context)或者叫根上下文。比如events和http指令是处在主上下文里的,而server指令是处在http上下文里中,而location指令又是处在server上下文里中。

1
2
3
4
5
6
7
主(根)上下文
http{
server{
location {
}
}
}

#(中文不知怎么称呼)字符后的都是注释。

处理静态内容

Web服务器的一项重要功能就是处理静态资源(图片和静态HTML文本),实现这个也非常的简单:根据HTTP请求,nginx会指定的资源比如/data/images目录下的图片和/data/www/目录下的html文件取出来交给客户端。而nginx配置也非常简单,只需在http配置块的server块下,编写两个location块就可以了
首先,让我们创建/data/www目录,然后在这个目录下建立index.html文件,里面随便写点什么内容,比如Hello LiuShiFu.
创建一个/data/images目录,里面放一些图片。
然后,让我们打开配置文件。文件中默认是有几个server块的配置的,且大部分是被注释掉的。现在我们把那些server都注释掉,重新在http块下配置一个server块。

1
2
3
4
http{
server{
}
}

一般来说,配置文件会根据监听端口号或者主机名分为几个server块,而nginx到底把http请求交给哪个server处理,则是根据请求的URI和server里location指令的值的匹配来处理的。下面我们添加一个location

1
2
3
4
5
6
7
http{
server{
location / {
root /data/www;
}
}
}

上述location的”/“前缀,是用来匹配http请求URI的。而它会添加到root指定的路径下,也就是/data/www,以此来形成请求资源(文件)和本地文件系统的对应。如果有多个location和URI匹配的话,那就优先选择最长匹配的location。我们写的location只提供了最短的前缀,长度为1。所以,只有其他location匹配失败的情况下才能使用这个location。现在,我们再添加一个location

1
2
3
4
5
6
7
http{
server{
location /images/ {
root /data;
}
}
}

上述的location将会匹配一个以/images开始的http请求(location / 也会被匹配但是它是最短的,忽略之)。配置好后,是类似下面的内容

1
2
3
4
5
6
7
8
9
10
http{
server{
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}

现在我们成功地配置了一个server块,监听在80端口,可以通过

```试试。比如访问```http://localhost/images/a.png```,Web服务器将会把/data/images/a.png响应给客户端,如果该文件不存在,则返回404 Error.如果URI不是/images/这样的,那就映射到/data/www目录,比如访问```http://localhost/some/example.html```,Web服务器将会把/data/www/some/example.html响应给客户端。
1
修改nginx配置文件之后,记得让主进程重新读取配置文件才能生效

nginx -s reload
`
如果出错的话,记得查看access.log和error.log日志。日志目录一般在/usr/local/ngin