Nginx 快速使用手册
Author: Hope Ning
Email: 242741154@qq.com
一、启动、停止和重新加载配置
nginx -s `signal`
stop
-快速关闭quit
-平稳停工reload
-重新加载配置文件reopen
-重新打开日志文件
二、配置文件结构
Nginx由由配置文件中指定的指令控制的模块组成。指令分为简单指令和块指令。一个简单的指令由名称和参数组成,以空格分隔,以分号结尾(;
)。块指令具有与简单指令相同的结构,但它以一组由大括号({
和}
)包围的附加指令结束,而不是分号。如果块指令可以在大括号中包含其他指令,则称为上下文(示例:events, http, server和location).
三、静态内容服务
Web服务器一个重要的任务是提供文件(例如图像或静态HTML页面)。我们可以实现一个示例——根据请求的不同,从不同的本地目录中获取文件:/data/www
(其中可能包含HTML文件)和/data/images
(包含图像)。这将需要编辑配置文件并设置http块中的server块中的两个location块。
首先,创建/data/www
目录并放置一个包含任意文本内容的index.html
文件,再创建/data/images
目录并放置一些图像。
接下来,打开配置文件。默认的配置文件已经包含了几个server
块的示例,不过其中大部分是注释掉的。现在,注释掉所有的块,并创建一个新的server
块:
http {
server {
}
}
通常,配置文件可能包括多个server
块,并按照它们所监听的端口及服务器的名称加以区分。当Nginx决定某个server
处理当前请求时,它就根据server
块中定义的location
指令的参数,测试请求头中指定的URI。
添加以下内容location
块到server
块:
location / {
root /data/www;
}
此location
块指定"/
"前缀与来自请求的URI相比较。为了匹配请求,URI将追加到root指令上,即/data/www
,以形成本地文件系统上请求的文件的路径。如果有多个匹配location
块,则Nginx选择前缀最长的块。此location
块提供最短的前缀,长度为1,所以只有当所有其他前缀都是location
块无法提供匹配,才将使用此块。
接下来,添加第二个location
块:
location /images/ {
root /data;
}
这将是请求的匹配,从/images/
(location /
也匹配这样的请求,但前缀较短)。
的结果配置。最终server
块应该如下所示:
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
这已经是一个服务器的工作配置,该服务器侦听标准端口80,并可在本地计算机上访问http://localhost/
。对于/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尚未启动,则可照常启动;否则需通过执行以下命令,向nginx的主进程发送reload
信号:
nginx -s reload
如果某些事情不像预期的那样工作,可以尝试在
access.log
和error.log
目录中的文件/usr/local/nginx/logs
或/var/log/nginx
里找出其中的原因。
四、设置简单的代理服务器
Nginx的一个常用用法是将其设置为代理服务器——服务器接收请求,然后将其传递给代理服务器,继而从代理服务器得到响应,返回给客户端。
接下来,我们将配置一个基本的代理服务器,它使用本地目录中的文件为图像请求提供服务,其他所有请求则发送到代理服务器。在本例中,两个服务器都将在单个nginx实例上定义。
首先,通过再添加一个server
块到nginx的配置文件中,作为代理服务器。其中包含以下内容:
server {
listen 8080;
root /data/up1;
location / {
}
}
这将是一个简单的服务器,它侦听端口8080(之前,listen
指令使用默认的标准端口80),并将所有请求映射到本地文件系统上的/data/up1
目录。创建该目录并在里面添加index.html
文件。注意,root
指令放在server
块内——当location
没有指定自己的root
命令时,使用该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;
}
该参数是一个正则表达式,它匹配所有以.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
并将所有其他请求传递给上面配置的代理服务器。
若要应用新配置,请像前几节所述一样,向nginx发送reload
信号。
更多可用于进一步配置代理连接的指令。