新手指南
启动、停止和重新加载 配置文件 的结构 提供静态内容 设置简单的代理服务器 设置 FastCGI 代理 |
本指南对 nginx 进行了基本的介绍,并描述了一些 可以用它完成的简单任务。 假设 nginx 已经安装在阅读器的机器上。 如果不是,请参阅 安装 nginx 页面。 本指南介绍如何启动和停止 nginx,并重新加载其 configuration,解释了结构 的配置文件中,介绍如何设置 nginx 要提供静态内容,如何将 nginx 配置为代理 服务器,以及如何将其与 FastCGI 应用程序连接。
nginx 有一个主进程和几个 worker 进程。 主进程的主要目的是读取和评估配置, 并维护工作进程。 工作进程对请求进行实际处理。 nginx 采用基于事件的模型和依赖于作系统的机制来高效地 在工作进程之间分发请求。 worker 进程的数量在配置文件中定义, 可以针对给定配置进行修复,也可以自动调整为 可用 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 进程并等待 worker 进程 要完成对当前请求的处理,可以执行以下命令:
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 发送信号的更多信息,请参阅控制 nginx。
配置文件的结构
nginx 由模块组成,这些模块由指定的指令控制
在配置文件中。
指令分为 simple directives 和 block directives。
简单指令由用空格分隔的 name 和 parameters 组成
,以分号 () 结尾。
block 指令的结构与 simple 指令相同,但
它不是分号,而是以一组附加指令结尾
用大括号 ( 和 ) 括起来。
如果 block 指令可以在大括号内有其他指令,
它称为上下文(例如:事件、HTTP、服务器、
和位置)。;
{
}
放置在配置文件外部的指令
的 S 都被视为位于主上下文中。
这events
和http
指令
驻留在main
上下文server
在http
和location
在server
.
标志后面的行的其余部分被视为注释。#
提供静态内容
一个重要的 Web 服务器任务正在服务
文件(例如图像或静态 HTML 页面)。
您将实现一个示例,其中,根据请求,
文件将从不同的本地目录提供:/data/www
(可能包含 HTML 文件)和/data/images
(包含图像)。
这将需要编辑配置文件并在 http 块中设置一个具有两个 location 块的 server 块。
首先,创建/data/www
目录中,并将index.html
文件(其中包含任何文本内容)和
创建/data/images
目录下并放置一些
图片。
接下来,打开配置文件。
默认配置文件已经包含几个
这server
块,大部分被注释掉了。
现在,注释掉所有这些块并启动一个新的server
块:
http { server { } }
通常,配置文件可能包含多个server
由端口区分的块
他们听
和服务器名称。
一旦 nginx 决定哪个server
处理请求,
它根据location
在server
块。
添加以下内容location
block 添加到server
块:
location / { root /data/www; }
这location
block 指定
“” 前缀与请求中的 URI 进行比较。
对于匹配的请求,URI 将添加到 root 指令中指定的路径,即/
/data/www
,
以在本地文件系统上形成所请求文件的路径。
如果有多个匹配项location
区块 nginx
选择前缀最长的那个。
这location
块提供最短的
前缀,长度为 1,
因此,如果所有其他location
块无法提供匹配项,则将使用此块。
接下来,添加第二个location
块:
location /images/ { root /data; }
它将匹配以/images/
(location /
也匹配此类请求,
但前缀较短)。
生成的server
block 应该
如下所示:
server { location / { root /data/www; } location /images/ { root /data; } }
这已经是侦听
在标准端口 80 上,并且可以在本地计算机上的http://localhost/
.
响应 URI 以/images/
,
服务器将从/data/images
目录。
例如,为了响应http://localhost/images/example.png
请求 nginx 将
发送/data/images/example.png
文件。
如果此类文件不存在,nginx 将发送响应
指示 404 错误。
URI 不以/images/
将是
映射到/data/www
目录。
例如,为了响应http://localhost/some/example.html
请求 nginx 将
发送/data/www/some/example.html
文件。
要应用新配置,请启动 nginx(如果尚未启动)或
发送reload
signal 传递给 nginx 的主进程,
通过执行:
nginx -s reload
如果某些事情没有按预期工作,您可以尝试找出 原因access.log
和error.log
目录中的文件/usr/local/nginx/logs
或/var/log/nginx
.
设置 Simple Proxy Server
nginx 的常见用途之一是将其设置为代理服务器,这 表示接收请求并将其传递给代理服务器的服务器, 从中检索响应,并将其发送到客户端。
我们将配置一个基本的代理服务器,它为 包含本地目录中的文件的映像,并将所有其他请求发送到 代理服务器。 在此示例中,两个服务器都将在单个 nginx 实例上定义。
首先,通过再添加一个来定义代理服务器server
block 添加到 nginx 的配置文件中,其中包含以下内容:
server { listen 8080; root /data/up1; location / { } }
这将是一个侦听端口 8080 的简单服务器
(以前,listen
指令
由于使用了标准端口 80)和映射
所有请求都发送到/data/up1
目录
文件系统。
创建此目录并将index.html
文件放入其中。
请注意,root
指令放置在server
上下文。
这样root
指令在location
为服务请求选择的块不会
include 它自己的root
命令。
接下来,使用上一节中的服务器配置
并对其进行修改以使其成为代理服务器配置。
在第一个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; }
该参数是一个正则表达式,匹配所有以 URI 结尾的 URI
跟.gif
,.jpg
或.png
.
正则表达式前面应有 。
相应的请求将映射到~
/data/images
目录。
当 nginx 选择location
block 来提供请求
它首先检查指定前缀的位置指令,记住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
signal 设置为
nginx 中,如前面部分所述。
还有更多指令可用于进一步配置 proxy 连接。
设置 FastCGI 代理
nginx 可用于将请求路由到运行 使用各种框架和编程语言构建的应用程序 比如 PHP。
与 FastCGI 服务器一起使用的最基本的 nginx 配置
包括使用 fastcgi_pass 指令而不是proxy_pass
命令
以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。
假设 FastCGI 服务器可以在localhost:9000
.
以上一节中的 proxy 配置为基础,
将proxy_pass
指令与fastcgi_pass
指令并将参数更改为localhost:9000
.
在 PHP 中,SCRIPT_FILENAME
参数用于
确定脚本名称,然后QUERY_STRING
parameter 用于传递请求参数。
生成的配置将为:
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 协议。