【翻译】nginx初学者指南

nginx初学者指南

本文翻译自nginx官方网站:http://nginx.org/en/docs/beginners_guide.html#controlhtml

该指南会对nginx作一个简要的介绍,同时描述一些使用nginx完成的简单任务。该指南假设读者的机器上已经安装好了nginx。若是没有安装好,请转移到Installing nginx页面完成安装。该指南描述了如何启动和中止nginx,如何从新载入nginx的配置,解释了配置文件的构成以及如何使用nginx来分发静态资源、如何配置nginx来做为一个代理服务器、以及如何使用FastCGI来链接到nginx。nginx

nginx有一个主进程和几个工做者进程。主进程的主要工做是读取和评估配置文件中的值,同时维护工做者进程。工做者进程处理实际的请求。nginx使用基于事件的模型和依赖于操做系统的机制来有效地在工做进程之间分发请求。工做进程的数量在配置文件中定义,能够针对给定的配置进行固定,也能够根据可用CPU内核的数量自动调整(参见worker_processes)。git

nginx及其模块的工做方式在配置文件中肯定。默认状况下,配置文件名为nginx.conf,并放置在/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx.目录中。web

启动、中止nginx和重载配置文件

要启动nginx,运行nginx的可执行文件。一旦nginx启动后,就能够经过调用 -s的命令行参数来配置它。使用一下语法:正则表达式

nginx -s signal

signal能够是一下列出的一个:数组

  • stop —快速关闭
  • quit — 优雅的关闭
  • reload — 从新载入配置文件
  • reopen —从新打开日志文件

例如,要中止nginx进程,等待worker进程完成服务当前请求,能够执行如下命令:服务器

nginx -s quit

注释:这个命令应该在启动nginx的同一用户下执行。并发

在将从新加载配置的命令发送到nginx或从新启动配置以前,不会应用配置文件中所作的更改。要从新加载配置,请执行:ide

nginx -s reload

一旦主进程接收到从新载入配置文件的信号,它首先检查配置文件中的语法是否有效,而后尝试应用配置文件中提供的配置。若是成功,那么他会建立新的工做者进程,并发送消息到旧的工做者进程中来通知旧的工做者进程关闭。不然,主线程回滚配置并使用旧的配置。同时旧的工做者进程接收到关闭请求,中止接收链接并处理当前请求知道完成当前请求后,旧的工做者进行会关闭并退出。工具

在一些工具/命令的帮助下也能够想nginx发送信号,好比kill。在本例中,一个信号被直接发送到具备给定进程ID的进程。默认状况下,nginx主进程的进程ID被写入nginx.pid,它位于/usr/local/nginx/logs或/var/run目录中。例如,若是主进程ID是1628,要发送退出信号致使nginx优雅地关闭(quit命令),执行:

kill -s QUIT 1628

要得到全部运行nginx进程的列表,可使用ps工具,例如:

ps -ax | grep nginx

关于发送信号到nginx的更多信息,请参阅:Controlling nginx.

配置文件的结构

nginx是由模块组成的,而模块有配置文件中的指令控制。指令分为简单指令和块指令。一个简单的指令由名称和参数组成,它们由空格分隔,并以分号(;)结束。块指令具备与简单指令相同的结构,但它的结尾不是分号,而是一组由大括号({和})包围的附加指令。若是一个块指令能够在大括号中包含其余指令,那么它被称为上下文(例如:events, http, server, and location

放在任何上下文以外的配置文件中的指令被认为是在主上下文中。events和http指令驻留在主上下文中,server驻留在http中,location驻留在server中。

#号后面的会被看成注释。

提供静态内容

个重要的web服务器任务是提供文件(例如图像或静态HTML页面)。接下来你将实现一个示例,根据请求,文件将从不一样的本地目录提供:/data/www(可能包含HTML文件)和/data/images(包含图像)。这将须要编辑配置文件,并在带有两个location块的http块中设置server块。

首先,建立一个 /data/www目录并在里面放一个包含任意内容的index.html文件,而后建立一个/data/images目录并在里面放置一些图片。

接下来,打开配置文件。默认配置文件已经包含了server块的几个例子,大部分都被注释掉了。如今注释掉全部这样的块,并开始一个新的server块:

http {
    server {
    }
}

一般,配置文件可能包含几个server块,这些服务器块由它们侦听的端口和服务器名称来区分(参见这里: distinguished )。一旦nginx决定哪一个server处理请求,它就根据server块中定义的location指令的参数测试请求头中指定的URI。

将如下location块添加到server块:

location / {
    root /data/www;
}

此location块制定了“/”前缀与来自请求的URI进行比较。为了匹配请求,URI将被添加到根指令中指定的路径,即/data/www,以造成本地文件系统上被请求文件的路径。若是有多个匹配的location块,nginx选择前缀最长的一个。上面的location块提供了长度为1的最短前缀,所以,只有当全部其余location块都不能提供匹配时,才会使用这个块。

下一步,添加另外一个location块:

location /images/ {
    root /data;
}

它将匹配以/images/开头的请求(location /也匹配此类请求,但前缀更短)。

配置文件中的server块最终看起来像是这个样子:

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

    location /images/ {
        root /data;
    }
}

上面这个配置完成后,对于像http://localhost这样的请求就能相应了。它默认监听80端口。若是是以“/images/”开头的请求,他会从/data/images这个本地文件夹中提供响应。举个例子:为了响应http://localhost/images/example.png这个请求,nginx会从/data/images/example.png提供响应。若是文件不存在,nginx会返回一个404的错误。没有以/images/这个路径开头的请求会被映射到/data/www这个本地路径上。举个例子,若是请求是http://localhost/some/example.html,那么nginx会发送/data/www/index.html这个文件过去。

为了应用新的配置,须要给nginx的主进程发送reload信号,执行下面的代码:

nginx -s reload

注释:若是发生了其余没有预料到的状况下,你能够查看access.log和error.log来找出缘由,这两个文件一般在/usr/local/nginx/logs目录或/var/log/nginx目录下。

创建一个简单的代理服务器

nginx的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将请求传递给代理服务器,从代理服务器检索响应,并将响应发送给客户机。

咱们将配置一个基本代理服务器,它使用本地目录中的文件来处理图像请求,并将全部其余请求发送到代理服务器。在本例中,这两个服务器将在一个nginx实例上定义。

首先,经过在nginx的配置文件中添加一个包含如下内容的服务器块来定义代理服务器:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这将是一个简单的server块,它监听端口8080(以前,因为使用了标准端口80,默认,因此没有指定listen指令),并将全部请求映射到本地文件系统上的/data/up1目录。建立此目录并将index.html文件放入其中。注意,根指令(root /data/up1)放在server上下文中。当为服务请求而选择的location块不包含本身的根指令时,将使用这种根指令。

接下来,使用上一节中的服务器配置并修改它,使其成为代理服务器配置。在第一个location块中,将proxy_pass指令与参数中指定的协议、代理服务器的名称和端口放在一块儿(在咱们的例子中,是http://localhost:8080):

 

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

咱们将修改第二个location块(仍是上一节中的配置中),它当前将带有/images/前缀的请求映射到/data/images目录下的文件,使其匹配具备典型文件扩展名的图像请求。修改后的位置块以下:

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

这个参数是一个正则表达式,他匹配全部以.git,.jpg,.png结尾的url,正则表达式的前面应该加上~。相应的请求将映射到/data/images目录。

当nginx选择一个location块来服务一个请求时,它首先检查指定前缀的位置指令,记住(匹配的)前缀最长的位置,而后检查正则表达式。若是与正则表达式匹配,nginx将选择此位置,不然,它将选择以前记住的位置。

代理服务的最终配置以下:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

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

这个server块将会过滤.gif.jpg, 或者.png结尾的请求, 并将他们映射到/data/images的本地路径下(经过将uri添加到root指令表示的本地路径以后),并将全部其余请求传递到上面配置的代理服务器。

要应用这个配置,和以往同样须要发送reload请求到nginx的主进程中,这里还有不少其余关于代理连接的一些知识: more

相关文章
相关标签/搜索