您的位置:首页 > 运维架构 > Nginx

nginx.org的beginner's guide页面翻译

2016-09-28 16:10 260 查看
本指南给出的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。使用如下的语法:

nginx -s signal

signal参数,可以是下面其中的一个:

stop - 快速停止
quit - 友好的停止
reload - 重载配置文件
reopen - 重新打开日志文件

例如:等待所有的工作进程结束当前的请求链接,再停止nginx进程,可执行:

nginx -s quit(这个命令应该是:之前启动nginx的用户调用)

修改的配置并不会生效,只有当重载了配置文件或者重新启动nginx,重载配置,可执行:

nginx -s reload

一旦主进程接收到了重新加载配置的信号,它会检查新的配置文件的语法有效性,并尝试应用在它提供的配置。新的配置应用成功,主进程启动新的工作进程,并发送消息给旧的工作进程,要求他们关闭。否则,主进程回滚更改的配置,并将继续使用旧的配置工作。旧的工作进程,接收到关闭的命令,停止接受新的连接,并继续服务当前的请求链接,直到所有这些请求被处理完毕,然后旧进程关闭。

使用Unix的工具,例如:kill命令。也可以向nginx进程发送signal。在这种情况下,一个signal直接发送给一个给定了进程ID的进程。默认,nginx的主进程的进程ID写在 “nginx.pid” 文件,位于 “/usr/local/nginx/logs” 或者 “/var/run”。例如:主进程ID是1628,发送 “QUIT” signal,令nginx友好的关闭,执行:

kill -s QUIT 1628

获取所有正在运行的nginx的进程列表,使用 “ps” 命令,例如:

ps -ax | grep nginx

查看更多发送signals给nginx的信息,查看 “Controlling
nginx”。

配置文件结构

Nginx由模块组成,模块由配置文件中指定的指令控制。指令被划分为简单指令和指令块。

简单指令,由指令名和参数组成,使用空格分隔,并以一个分号(;)结尾。

指令块,有和简单指令相同的结构,不同的是,不是以分号结尾,而是以大括号(“{}”)包围的一组附加的指示替代。如果指令块的大括号中,包含其他指令,它被称作 “上下文”(context),例如:events,http,server和location指令。

配置文件中,在任意的上下文(context)之外的指令,被认为在 “主上下文”(main context)。events&http指令在 “主上下文”,server指令在 “http上下文”,location指令在 “server上下文”。

每行中,在“#”后面的其余部分,作为注释

提供静态内容

web服务器的一个重要任务是提供文件(例如:图片或静态HTML页面)。你要实现的一个例子是:根据请求,从本地不同的目录提供文件:/data/www(可能包含HTML文件)&/data/images(包含图片)。这需要编辑配置文件,配置一个 “server” 指令块,在 “http” 指令块中。“server”中包含两个 “location” 指令块。

首先,创建/data/www目录,并创建一个index.html文件(任意内容)& 创建/data/images目录,放几张图片。

接着,打开配置文件。默认的配置文件,已经包含几个“server”指令块的实例,大部分是注释的。现在,注释掉所有这些“server”指令块,并创建一个新的“server”指令块:

http {
server {
}
}


通常,配置文件可能包含几个“server”块,它们的区别在于:监听的端口号和服务器名称(server_names)。一旦nginx决定哪个“server”块处理请求,它会尝试“请求header的详细URI”,与“server”块中的 “location”指令进行匹配。

添加下面的”location“指令块到”server“指令块中:

location / {
root /data/www;
}


”location“块指定的”/“前缀与请求URI进行比较。为了匹配请求,URI将被添加到”root“指令指定的path(/data/www),组成本地文件系统的请求文件路径。如果匹配到好几个”location“块,nginx选择一个最大前缀匹配。上面我们的示例”location“块,提供了一个最短的前缀,只有当所有其他的”location“块匹配失败,才会使用这个最短的”location“块。

接下来,添加第二个”location“块:

location /images/ {
root /data;
}


它将匹配已”/image“开头的请求(”location /“也匹配到了这些请求,但是它更短,前面说了nginx会选择最长的匹配)

最后,”server“块的配置结果如下(合并了之前的几步):

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

location /images/ { root /data; }
}
这已经是一个监听标准80端口的”server“块的工作配置,在本地机器上,可使用”http://localhost“来访问。为了响应以”/images“开头的URI请求,服务器将从”/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/some/example.html”文件。

为了应用新的配置,nginx未启动,则启动nginx;nginx已启动,则发送“reload”signal给nginx的主进程,执行:

nginx -s reload

某些情况下,并未像我们希望的那样工作,你可以尝试在“/usr/local/nginx/logs”或“/var/log/nginx”目录中的“access.log”&“error.log”文件,找到原因。

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

nginx的一个频繁的使用方式是:配置成一个代理服务器。代理服务器是,接收客户端请求,再发送这些请求到目标服务器,目标服务器将响应发送给代理服务器,代理服务器接收到响应后,再发送响应给客户端。

我们配置一个基础的代理服务器,图片请求,仍从本地目录获取,非图片请求转发给一个被代理的服务器(目标服务器)。在这个例子中,2个服务器将被定义在一个nginx实例上。

首先,添加一个另外的“server”块,到nginx的配置文件,定义“被代理的服务器”(目标服务器),如下内容:

server {
listen 8080;
root /data/up1;

location / {
}
}
这是一个监听在8080端口的简单服务器,映射所有请求到本地文件系统的”/data/up1“目录。创建该目录,并生成一个index.html文件。注意:”server“指令块中,包含了”root“指令。当请求匹配到的”location“块中,没有”root“指令时,使用外层的”server“定义的root指令。

下一步,使用上一小节的”server“配置,修改它作为代理服务器配置。在第一个”location“块,写入“proxy pass”指令,包含:协议,主机名,端口号。

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“结尾的URI。匹配到的请求,将会映射到“/data/images”目录。

当nginx选择了一个“location”块,响应一个请求。首先会检查“locatoin”指令指定的前缀,记住最大前缀的“location”块,然后检查正则。如果有一个正则匹配,nginx使用正则匹配的“location”,否则,nginx使用先前记住的“最大前缀”的location块。

最终的代理服务器的配置结果如下:

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

location ~ \.(gif|jpg|png)$ { root /data/images; }
}
这个服务器,将过滤以”.gif|.jpg|.png“结尾的请求,映射到”/data/images/”,传递所有其他的请求给上面的代理服务器配置。

应用新的配置,发送“reload”signal给nginx:nginx -s reload

有很多其他的指令,用于进一步配置代理服务器,查看:代理服务器模块

配置一个FastCGI代理

nginx可被用来,路由请求给FastCGI服务器,该类服务器运行各种框架和编程语言构建的应用,例如:PHP

FastCGI服务器,可工作的最基本的nginx配置,包含:使用“fastcgi_pass”指令代替“proxy_pass”指令,同时,“fastcgi_params”指令,用来设置“FastCGI服务器“的参数。假设FastCGI服务器在”location:9000“上是可访问的。又在之前的代理服务器的”server“块,进行修改配置。在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; }
}
配置的服务器,将路由所有的非静态图片请求到一个监听在”localhost:9000“的代理服务器上,通过”FastCGI协议“
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息