[nginx文档翻译系列]新手指南

原文连接:http://nginx.org/en/docs/begi...
转自个人github
有些地方以为翻译的不是很合理,因此在括号中写出了原句。
若是有地方翻译的不合理,请多多指教。html

  • 启动、中止和重启加载配置nginx

  • 配置文件结构git

  • 提供静态内容github

  • 设置一个简单的代理服务器正则表达式

  • 设置FastCGI代理编程

本指南提供了一个关于nginx基本介绍并描述了一些能够用它完成的简单的任务。
咱们假设nginx已经安装在读者的电脑上。若是还未安装请看“安装nginx”章节。本指南描述如何启动、中止和重启它的配置文件,解释了配置文件的结构并描述了如何设置nginx如何服务静态内容、如何配置nginx做为一个代理服务器以及如何将它与FastCGI应用链接。服务器

nginx有一个主进程和多个工做进程。主进程的目的是为了读取和评估配置并保持工做进程。
工做进程则作请求的实际处理。nginx采用基本的事件模型和操做系统依赖性机制来有效地分配工做进程之间的请求。
工做进程的数量能够在配置文件中定义,也能够给出一个固定值,又或者调节到CPU内核可用的数量。
参阅:worker_processes并发

nginx和它的模块工做方式是在配置文件中定义的。默认状况下,这个配置文件名为nginx.conf。放置在/usr/local/nginx/conf,/etc/nginx或者/usr/local/etc/nginx目录。框架

启动、中止和重启加载配置

要启动nginx,运行可执行文件。一旦nginx被启动,它能够经过调用-s参数来执行控制。使用一下命令:编程语言

nginx -s signal

signal能够是如下之一:

  • stop — 快速关机

  • quit — 正常关机

  • reload — 从新加载配置文件

  • reopen — 从新打开日志文件

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

nginx -s quit

执行此命令的用户应与启动nginx的用户一致。

在配置文件中的修改是不会被应用的,直到从新加载的命令被传送到nginx或者从新启动。
从新加载配置,执行:

nginx -s reload

一旦主进程接收到信号从新加载配置文件,它会检查新配置文件语法的合法性并尝试应用。

若是成功,主进程会开启新的工做进程,并发送消息告诉旧的工做进程,请求他们快速中止。

反之,主进程会回滚配置文件修改的部分,继续使用旧的配置。旧的工做进程接收到快速中止的命令,会中止接受新的链接请求,它会继续服务当前的请求直到请求被服务结束。在那以后,旧的进程会退出。

一个信号也能够在Unix工具的帮助下传送到nginx进程,如kill工具。在这种状况下,会直接把信号传送给所指定的进程ID的进程。nginx主进程的进程ID被写入,默认状况下,nginx.pid在/usr/local/nginx/logs或者/var/run目录下。好比,若是主进程ID是1628,要传送QUIT信号来中止nginx,执行:

kill -s QUIT 1628

为了获取正在运行的nginx进程列表,可使用ps工具,好比,如下方式:

ps -ax | grep nginx

有关发送信号给nginx的更多信息,请参阅Controlling nginx

配置文件结构

nginx是由模块组成的,这些模块在配置文件中又有指定的指令。
指令被分红简单指令和块指令。简单指令包括名称和用空格分割的参数以及用来结尾的分号(;)。
一个块指令和简单指令有相同的结构,可是它使用大括号({and})来包围一系列说明来替代使用分号做为结尾。
若是一个块指令在大括号中有其余的指令,则称之为上下文(如:events,http,server, 和location)。

放在配置文件最外面的指令的称之为主文,event,http指令在主文中;serverhttp中,
locationserver中。

‘#’开头的其它行是注释。

提供静态内容

Web服务器一个重要的任务就是提供文件(如图像或者静态html页面)。
根据需求,你将实现一个例子,文件被本地不一样的目录服务着,如/data/www
包含html文件,/data/images 包含图片。这须要编辑配置文件,在http块中设置server块。

首先,建立/data/www 目录并放置index.html文件(文件中能够是任意内容)。
而后建立/data/images目录并放置一些图片。

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

http {
    server {
    }
}

通常状况下,配置文件中包含多个server块,它们之间以监听的端口号和server name来区分。
一旦nginx决定了哪一个server处理请求,它测试在请求的对server块内定义的位置指令的参数头中指定的URI。
(it tests the URI specified in the request’s header against the parameters of the location directives defined inside the server block.)

将location块添加到server块中,以下:

location / {
    root /data/www;
}

与请求的URI相比,location块指定了“/”前缀。为了匹配请求,该URI会被添加到root指令指定的路径中,
即,到/data/www,在本地文件系统中组成请求文件的路径。若是有多个匹配的location块,nginx会选择前缀最长的。
上面的location块提供了最短的前缀,若是其余的location块匹配失败,这个location块就会被使用。

接下来添加第二个location块:

location /images/ {
    root /data;
}

它与带/images/的请求请求匹配。(location / ,固然也匹配,除非有更短的前缀。)
(It will be a match for requests starting with /images/ (location / also matches such requests, but has shorter prefix).)

配置文件中server块应是这样的:

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

这已是一个能够工做的服务器配置文件,它监听的是80端口,可在本地经过http://localhost/访问。
响应带/images/的URI路由请求时,服务器将会从/data/images目录发送文件。
例如,响应 http://localhost/images/example.png 路由请求,nginx将会发送/data/images/example.png
文件。若是这个文件不存在,nginx将会发出404错误的响应。不带/images/的URIs请求将会映射到/data/www目录。
例如,为了响应http://localhost/some/example.html请求,nginx将会发送/data/www/some/example.html文件。

为了应用新的配置,若是还没开启nginx请开启,或者向nginx的主进程发送从新加载的信号,执行:

nginx -s reload

万一没有像预期的那样工做,您能够尝试在` /usr/local/nginx/logs`或者`/var/log/nginx`目录中的
access.log和error.log文件找到缘由。

设置一个简单的代理服务器

nginx最经常使用的功能之一就是将其设置为代理服务器,这将意味着服务器接受请求,并将请求传送给代理服务器,
而后从代理服务器取回响应,并将取回的响应发送给客户端。

咱们将会配置一个基础版本的代理服务器,它能够服务来自本地目录的图片文件请求,并将全部其它请求发送给代理服务器。
在这个例子中,全部的服务器都被定义为一个单一的nginx实例。

首先,定义代理服务器经过在nginx的配置文件增长一个额外的server块,如下为添加的内容:

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

这是一个简单的server块,监听8080端口(此前,listen指令没有被提起是因为已经使用了标准的80端口),并将全部的请求
映射到本地文件系统的/data/up1目录。建立这个目录,并将index.html文件放置其中。注意root指令已经被放置在server环境中。
当location块被选中服务请求时,root指令就会被使用,固然不包括本身的root指令。
(Such root directive is used when the location block selected
for serving a request does not include own root directive.)

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

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

咱们将会修改第二个location块,它目前映射全部带/images/前缀的请求到/data/images
目录下的文件,是为了使其符合典型的文件扩展的图像请求。修改的location块应该是这样:

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

该参数是一个正则表达式,匹配全部.gif,.jpg,.png 结尾的路由。正则表达式应该优于~。相应的请求都会被映射到
/data/images目录。

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

所以代理服务器的配置文件应该是这样的:

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

此服务器会筛选出以.gif,.jpg,.png 结尾的请求,并将他们映射到/data/images目录下(经过添加URI到root指令的参数上),
而后经过全部其它请求到代理服务器配置上。

为了应用新的配置文件,发送reload信号到nginx,正如前面的章节所描述的那样。

还有更多的指令可用于进一步配置代理连接。

设置FastCGI代理

nginx可用于路由请求FastCGI服务器,FastCGI服务器运行各类不一样的框架和编程语言,如PHP,创建的应用。

最经常使用与 FastCGI server工做的nginx配置,用fastcgi_pass指令替代了proxy_pass指令,并设置fastcgi_param
参数传递给FastCGI server。假设FastCGI server经过localhost:9000能够访问。
以上一节代理配置做为基础,用fastcgi_pass指令替换proxy_pass指令,并修改参数为localhost:9000。在PHP中,
SCRIPT_FILENAME参数用来肯定脚本名,QUERY_STRING参数用来传递请求参数。配置文件结果应该是:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }
    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

这将会设置一个服务器,会经过全部的请求,除了静态图像的请求到代理服务器,经过FastCGI协议运行在localhost:9000上。

相关文章
相关标签/搜索