原文档: http://nginx.org/en/docs/beginners_guide.html
译者:Oopsguy
本指南旨在介绍 nginx 基本内容和一些在 Nginx 上可以完成的简单任务。这里假设您已经安装了 nginx,否则请参阅安装 nginx 页面。本指南介绍如何启动、停止 nginx 和重新加载配置,解释配置文件的结构,并介绍如何设置 nginx 以提供静态内容服务,如何配置 nginx 作为代理服务器,以及如何将其连接到一个 FastCGI 应用程序。
nginx 有一个主进程(Master)和几个工作进程(Worker)。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程对请求进行处理。nginx 采用了基于事件模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。工作进程的数量可在配置文件中定义,并且可以针对给定的配置进行修改,或者自动调整到可用 CPU 内核的数量(请参阅 worker_processes)。
配置文件决定了 nginx 及其模块的工作方式。默认情况下,配置文件名为
,并放在目录
- nginx.conf
,
- /usr/local/nginx/conf
或
- /etc/nginx
中。
- /usr/local/etc/nginx
要启动 nginx,需要运行可执行文件。nginx 启动之后,可以通过调用可执行文件附带 - s 参数来控制它。 使用以下语法:
- nginx - s信号
信号可能是以下之一:
例如,要等待工作进程处理完当前的请求才停止 nginx 进程,可以执行以下命令:
- nginx - s quit
这个命令的执行用户应该是与启动 nginx 用户是一致的
在将重新加载配置的命令发送到 nginx 或重新启动之前,配置文件所做的内容更改将不会生效。要重新加载配置,请执行:
- nginx - s reload
一旦主进程(Master)收到要重新加载配置(reload)的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果成功,主进程将启动新的工作进程(Worker),并向旧工作进程发送消息,请求它们关闭。否则,主进程回滚更改,并继续使用旧配置。旧工作进程接收到关闭命令后,停止接受新的请求连接,并继续维护当前请求,直到这些请求都被处理完成之后,旧工作进程将退出。
可以借助 Unix 工具(如 kill 工具)将信号发送到 nginx 进程,信号直接发送到指定进程 ID 的进程。默认情况下,nginx 主进程的进程 ID 是写入在
或
- /usr/local/nginx/ logs
中的 nginx.pid 文件中。例如,如果主进程 ID 为 1628,则发送 QUIT 信号让 nginx 正常平滑关闭,可执行:
- /var/run
- kill - s QUIT 1628
获取所有正在运行的 nginx 进程列表,可以使用
命令,如下:
- ps
- ps - ax | grep nginx
有关向 nginx 发送信号的更多信息,请参阅控制 nginx。
nginx 是由配置文件中指定的指令控制模块组成。指令可分为简单指令和块指令。一个简单的指令是由空格分隔的名称和参数组成,并以分号(;)结尾。块指令具有与简单指令相同的结构,但不是以分号结尾,而是以大括号({和})包围的一组附加指令结尾。如果块指令的大括号内部可以有其它指令,则称这个块指令为上下文(例如:
,
- events
,
- http
和
- server
)。
- location
配置文件中被放置在任何上下文之外的指令都被认为是主上下文。
和
- events
指令在主上下文中,
- http
在
- http
中,
- server
又在
- location
中。
- server
#号之后的行的内容被视为注释。
web 服务器的一个重要任务是提供文件(比如图片或者静态 HTML 页面)服务。您将实现一个示例,根据请求,将提供来自不同的本地目录的文件:
(可能包含 HTML 文件)和
- /data/www
(包含图片)。这需要编辑配置文件,在
- /data/images
中配置一个包含两个
- http
块的
- location
块指令。
- server
- http {
- server {}
- }
通常,配置文件可以包含几个由监听端口和服务器域名区分的
块指令。一旦 nginx 决定由哪个
- server
来处理请求,它会根据
- server
块中定义的
- server
指令的参数来检验请求头中指定的 URI。
- location
添加如下
块指令到
- location
块指令中:
- server
- location / {
- root / data / www;
- }
该
块指令指定 "/" 前缀与请求中的 URI 相比较。对于匹配的请求,URI 将被添加到根指令中指定的路径,即
- location
,以形成本地文件系统上所请求文件的路径。如果有几个匹配上的
- /data/ www
块指令,nginx 将选择具有最长前缀的
- location
块。上面的位置块提供最短的前缀,长度为 1,因此只有当所有其它
- location
块不能匹配时,才会使用该块。
- location
接下来,添加第二个
指令快:
- location
- location / images / {
- root / data;
- }
以
为开头的请求将会被匹配上(虽然
- /images/
也能匹配上此请求,但是它的前缀更短)
- location /
最后,
块指令应如下所示:
- server
- server {
- location / {
- root / data / www;
- }
- location / images / {
- root / data;
- }
- }
这已经是一个监听标准 80 端口并且可以在本地机器上通过
地址来访问的有效配置。响应以
- http://localhost/
开头的 URI 请求,服务器将从
- /images/
目录发送文件。例如,响应
- /data/images
请求,nginx 将发送
- http://localhost/images/example.png
文件。如果此文件不存在,nginx 将发送一个 404 错误响应。不以
- /data/images/example.png
开头的 URI 的请求将映射到
- / images/
目录。例如,响应
- /data/www
请求,nginx 将发送
- http://localhost/some/example.html
文件。
- /data/www/some/example.html
要让新配置立刻生效,如果 nginx 尚未启动可以启动它,否则通过执行以下命令将重新加载配置信号发送到 nginx 的主进程:
- nginx - s reload
如果运行的效果没有在预期之中,您可以尝试从
或
- /usr/local/nginx/logs
中的 access.log 和 error.log 日志文件中查找原因。
- /var/log/ nginx
nginx 的一个常见用途是作为一个代理服务器,作用是接收请求并转发给被代理的服务器,从中取得响应,并将其发送回客户端。
我们将配置一个基本的代理服务器,它为图片请求提供的文件来自本地目录,并将所有其它请求发送给代理的服务器。在此示例中,两个服务器在单个 nginx 实例上定义。
首先,通过向 nginx 的配置文件添加一个
块来定义代理服务器,其中包含以下内容:
- server
- server {
- listen 8080;
- root / data / up1;
- location / {}
- }
这是一个监听 8080 端口的简单服务器(以前,由于使用了标准 80 端口,所以没有指定 listen 指令),并将所有请求映射到本地文件系统上的
目录。创建此目录并将 index.html 文件放入其中。请注意,
- /data/up1
指令位于
- root
上下文中。当选择用于处理请求的
- server
块不包含
- location
指令时,将使用此
- root
指令。
- root
接下来,在上一节中的服务器配置基础上进行修改,使其成为代理服务器配置。在第一个
块中,使用参数指定的代理服务器的协议,域名和端口(在本例中为
- location
)放置在 proxy_pass 指令处:
- http://localhost:8080
- server {
- location / {
- proxy_pass http: //localhost:8080;
- }
- location / images / {
- root / data;
- }
- }
我们将修改使用了
前缀将请求映射到
- /images/
目录下的文件的第二个
- /data/images
块,使其与附带常见的图片文件扩展名的请求相匹配。修改后的
- location
块如下所示:
- location
- location~\. (gif | jpg | png) $ {
- root / data / images;
- }
该参数是一个正则表达式,匹配所有以. gif,.jpg 或. png 结尾的 URI。正则表达式之前应该是〜。相应的请求将映射到
目录。
- /data/images
当 nginx 选择一个
块来提供请求时,它首先检查指定前缀的
- location
指令,记住具有最长前缀的
- location
,然后检查正则表达式。如果与正则表达式匹配,nginx 会选择此
- location
,否则选择更早之前记住的那一个。
- location
代理服务器的最终配置如下:
- server {
- location / {
- proxy_pass http: //localhost:8080/;
- }
- location~\. (gif | jpg | png) $ {
- root / data / images;
- }
- }
此
将过滤以. gif,.jpg 或. png 结尾的请求,并将它们映射到
- server
目录(通过向 root 指令的参数添加 URI),并将所有其它请求传递到上面配置的代理服务器。
- /data/images
要使新配置立即生效,请将重新加载配置文件信号(reload)发送到 nginx,如前几节所述。
还有更多的指令可用于进一步配置代理连接。
nginx 可被用于将请求路由到运行了使用各种框架和 PHP 等编程语言构建的应用程序的 FastCGI 服务器。
与 FastCGI 服务器协同工作的最基本的 nginx 配置是使用
指令而不是
- fastcgi_pass
指令,以及
- proxy_pass
指令来设置传递给 FastCGI 服务器的参数。假设 FastCGI 服务器可以在 localhost:9000 上访问。以上一节的代理配置为基础,用
- fastcgi_param
指令替换
- fastcgi_pass
指令,并将参数更改为 localhost:9000。在 PHP 中,
- proxy_pass
参数用于确定脚本名称,
- 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 上运行的代理服务器。
- server
来源: http://www.cnblogs.com/oopsguy/p/7239102.html