博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx烂笔头——新手指南文档翻译
阅读量:4079 次
发布时间:2019-05-25

本文共 4416 字,大约阅读时间需要 14 分钟。

说明:“Nginx烂笔头”系列Blog是自己对Nginx官方文档的的翻译,用作阅读笔记便于日后查阅的成分居多,无关重要内容会删减,也可能会加入自己的理解。囿于个人水平,一些专业的名称翻译不会太准确,推荐查看。翻译内容如果有错误,欢迎指正。

本文翻译自Nginx官网网页文档。

文章目录

1.摘要

指引描述了如何启动、停止nginx和重新加载nginx,解释了配置文件的结构并且说明使用nginx做静态文件服务器该如何设置、如何把nginx配置成一个代理服务器和如何把它作为一个fastCGI应用连接。

Nginx有一个主线程和若干个服务线程(Worker Process)。主线程的功能是读取并验证配置文件。服务线程处理各个请求。Nginx采用了事件驱动和依赖系统的架构来通高效地分发请求给各个服务线程。服务线程的数量定义在配置文件上,可以通过配置文件修改或者根据可用的CPU核心数来自动调整(参看)。

Nginx和nginx的模块是由配置文件决定的。配置默认名称为nginx.conf,一般放在/usr/local/nginx/conf、/etc/nginx或者/usr/local/etc/nginx路径下。

2.启动、停止和重新加载nginx配置

启动nginx,执行ngiinx可执行文件就行。

./nginx

当nginx启动之后,它可以通过调用-s参数的方式控制。用下面的语法:

./nginx -s [signal]

signal可选项可以是

  • stop 快速关闭
  • quit 流畅关闭
  • reload 重新加载配置文件
  • reopen 重新打开日志文件

例如,要等待所有服务线程完成现在正在处理的请求后再关闭nginx可以使用

./nginx -s quit

这个命令需要使用启动nginx服务时的用户执行

在reload命令和重启nginx之前,修改配置文件不会应用到nginx上。使用下面命令重新加载配置文件

./nginx -s reload

当nginx的主线程收到重新加载信号时,先验证新配置文件的语法是否正确,然后尝试在主线程中应用新的配置。如果应用成果,主线程会开启新的服务线程并发送关闭信号给旧的访问线程。否则,主线程会回滚到原来的配置并继续使用旧的服务线程去工作。旧的服务线程接到关闭信号后会停止接受新的请求并且会继续处理线程中所有的请求导结束。然后,旧线程关闭。

信号也可以通过Unix的一些工具例如kill命令。在这种情况下,信号直接发送给指定ID的线程。Ngix的主线程id一般会被记录在/usr/local/nginx/logs或者/var/runnginx.id文件中。例如,主线程id是1268,发送quit信号:

kill -s QUIT 1628

3.配置文件的结构

Nginx由不同的模块组成,这些模块是有配置文件中的指令(Directives)控制的。指令分为简单指令和快指令。简单指令由名字和参数组成,用空格分割分号结尾。快指令和简单指令的结构一样,不同的是它是以大括号包围的一组简单指令结束的。如果一个快指令里面包含有其他的快指令,它叫上下文(例如:events,http,server和location)。

放置在任何上下文之外的指令被称为主上下文(main context)。events和http块指令(上下文)在主上下文中(是否可以理解为主上下文就只有这两个指令?),server块指令在http上下文中,location指令在server指令块中。

以#号开头的一行在配置文件中是注释。

4. 提供静态资源服务

Web服务器的一个重要任务就是提供文件(比如图片或者静态Html页面)。你可以写一个根据不同请求返回不同本地路径文件的例子:/data/www(里面有HTML页面)和/data/images(里面有图片)。这需要在配置文件的http上下文中配置server上下文并且在server上下文中添加两条location块指令。

先创建好两个路径,放置一个index.html和图片在对应目录。

然后,打开配置文件,默认的配置文件已经包含了server,大部分被注释掉了。添加一个新的server指令块。

http {
server {
}}

通常,配置文件都会包含几个server块指令,用server监听的端口和server names来区分。当nginx决定了那个server进程去处理请求时,它会尝试对比请求头中的url和server快指令中的location块指令定义的url参数。

添加下面的location块指令到server块指令。

location / {
root /data/www;}

这个location块指令指定了“/”前缀来对比请求中的url。对于匹配上url的请求,请求的url会被加上root指令中指定的地址,就是/data/www,来组成本地文件系统的访问路径。如果同时有多个location块指令匹配满足,nginx会选择哪个最长的前缀。上面配置的location块指令是最短的前缀,只有长度1,所以,nginx会在其他location没有匹配上的时候才使用它。

接下来,添加一个如下的locatin块指令

location /images/ {
root /data;}

他会匹配请求url以/images/开头的请求(location /同样匹配,但是长度比这里短)

配置文件最终的结果如下所示:

server {
location / {
root /data/www; } location /images/ {
root /data; }}

上面的配置已经可以在一个标准的80端口下使用的配置了,并且可以在本地机器上使用http://localhost地址访问。处理以/images开头的url时,nginx会把/data/images目录下的文件放回给请求。例如:一个请求为http://localhost/images/example.png,nginx会返回/data/images/example.png这个文件。如果文件不存在,nginx会返回一个404错误。没有以/images开头的url会被定位到/data/www目录。例如,请求http://localhost/some/example.html会返回/data/www/some/example.html文件。

想要应用新写的配置文件,启动nginx或者重启nginx用reload信号。

./nginx -s reload

如果有些没有按照你的期望来运行,你可以在路径/usr/local/nginx/logs或者/var/log/nginx查看access.log和error.log文件来寻找原因。

5.设置简单的代理服务器

nginx的一个常用功能就是用作代理服务器,所谓代理服务器就是一个接受请求,转发请求到代理的服务器中,接受服务器的返回并把这个返回发送会客户端的一个服务器。(这里的描述说的实际上是反向代理服务器,但是原文用的是Proxy Server而不是Reverse Proxy

来配置一个简单的反向代理服务器,提供返回本地图片服务器的功能和反向代理的服务。在这个例子中,所有的服务都会被定义在一台nginx实例服务器中。

首先,给nginx的配置文件添加多一个server块指令用来定义代理服务:

server {
listen 8080; root /data/up1; location / {
}}

这个会称为一个监听8080端口的服务(先前,listen指令没有设置,这样的话就会默认使用80端口)并且把所有请求映射到本地文件的/data/up1路径。创建这个路径并准备一些html文件。注意,root指令是放在server上下文中的。这样的root指令会用在哪些没有包含root指令的location块指令中。这里就是模拟一个其他服务器的功能

接下来,修改上一节的配置来实现代理服务的配置。在第一个location块指令中,增加proxy_pass指令并在参数中指定需要代理的服务器的协议、名称和端口。

server {
location / {
proxy_pass http://localhost:8080; } location /images/ {
root /data; }}

修改第二个location块指令,原来这个块指令会把请求Url带有/images前缀的请求映射到/data/images目录,把它修改成匹配一些典型的文件拓展名的请求。修改后如下所示:

location ~ \.(gif|jpg|png)$ {
root /data/images;}

这个参数是一个正则表达式,匹配url以.gif,.jpg或者.png结尾的请求。一个正则表达式需要以~符号开头。对应的请求会被映射到/data/images目录。

当nginx选择一个location块指令来处理一个请求的时候,首先会检查指定的前缀,先记录location指令中的最长前缀,然后检查正则表达式。如果一个正则表达式匹配了这个请求,nginx会用正则表达式的这个location,否则,使用之前记录下的最长前缀的location。

配置文件的结果如下所示:

server {
location / {
proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ {
root /data/images; }}

6.设置 FastCGI代理

这部分不常用就省略了。

7.总结

  1. Nginx配置默认名称为nginx.conf,一般放在/usr/local/nginx/conf、/etc/nginx或者/usr/local/etc/nginx路径下。
  2. nginx -s stop 快速停止
  3. nginx -s quit 流畅停止
  4. nginx -s reload 重新加载配置
  5. nginx -s reopen 重新打开日志文件
  6. 静态文件服务器:配置server,location,root指令
  7. 方向代理服务器:location中配置proxy_pass指令
  8. 多个location匹配上同一个请求url时,使用前缀长的location配置
  9. location指令配置的路径中,正在表达式的优先级比普通路径高

转载地址:http://ptsni.baihongyu.com/

你可能感兴趣的文章
自定义大头针
查看>>
UIButton添加block点击事件
查看>>
利用runtime给类别添加属性
查看>>
本地推送
查看>>
FMDB的使用
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
TableDnd(JQuery表格拖拽控件)应用进阶
查看>>
[转]开源中最好的Web开发的资源
查看>>
java接口不能实例化原因浅谈
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
Java8 Lambda表达式介绍
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>