• Bugfix:要是在布置中动用了包蕴空替换字符串的”rewrite”指令,则大概在开发银行或重新配置时期产生疏段错误

  • Bugfix:假使将”break”指令与”alias”指令或含有 UQX56I
    的”proxy_pass”指令一同行使,则恐怕在 worker 进度中产生疏段错误

  • Bugfix:假设要求 ULANDI 被重写为含有空字符的 U瑞鹰I,则”Location”的响应
    header 行也许含有屏弃物

  • Bugfix:使用”error_page”指令回到重定向时,带有正文的央浼会被错误管理;该错误在
    0.7.12 中冒出过

  • Bugfix:使用 HTTP/2 时现身 socket 泄漏的动静

  • Bugfix:在 SSL 连接中处理流程央求时大概会生出超时; 该错误在
    1.17.5 中冒出过

  • Bugfix: in the ngx_http_dav_module.

原标题:nginx 1.17.7 主线版发表 来源:开源中中原人民共和国nginx
会同一时候敬服着五个支行,分别为 mainline 主线版和 stable 稳定版。然则在
nginx
中,“牢固”指的是功用和换代频率,它与软件质量毫不相关。稳固分支在其生命周期中未有选取新功能,而且普通仅吸收接纳三个或三个更新,用于修复严重的不当。nginx
1.17.7(mainline version)发表了,此版本首借使修补
bug,改变内容如下:Bugfix:如若在构造中行使了包蕴空替换字符串的”rewrite”指令,则也许在开发银行或重新配置时期产目生段错误Bugfix:假如将”break”指令与”alias”指令或含有
UTiguanI 的”proxy_pass”指令一同利用,则或许在 worker
进度中发出分段错误Bugfix:假若须要 UENVISIONI 被重写为带有空字符的
ULANDI,则”Location”的响应 header
行大概带有垃圾Bugfix:使用”error_page”指令回到重定向时,带有正文的号召会被错误处理;该错误在
0.7.12 中冒出过Bugfix:使用 HTTP/2 时现身 socket 泄漏的情形Bugfix:在
SSL 连接中管理流程央浼时恐怕会发生超时; 该错误在 1.17.第55中学冒出过Bugfix: in the ngx_http_dav_module.下载地址 | 更新表明

目录

配置Location指令

Nginx根据UHavalL将倡议发送给分化的代办,或拍卖分化的文本央求。由server命令中的location一声令下配置法则。

比如说,可以为虚构服务器配置三个location一声令下,将部分伸手发送给代理服务器#1,将此外一些伸手发送给代理服务器#2,再由本土文件系统管理剩余乞请。

Nginx会将央求的U奥德赛L相称全部的location指令,请实施相配location中的指令。每种location指令中何奇之有还恐怕会含有多条更是精细匹配的location指令。

location指令包蕴两类参数:前缀字符串正则表达式。乞求要同盟前缀字符串的话,必需早前缀字符串开始。

以下例子中location参数相称以/some/path/开首的恳求UMuranoI,如/some/path/document.html(不匹配/my-site/some/path,因为/some/path不在早先地方)。

location /some/path/ {
    ...
}

~用以相称区分朗朗上口写的正则表明式,~*用以相称不区分朗朗上口写的正则表达式。上面例子相配大肆富含.html.htm的URI。

location ~ \.html? {
    ...
}

Nginx先相称前缀字符串,然后再相配正则表达式。正则表达式具备较高优先级,除非动用^~修饰符。在享有前缀字符串中,Nginx会筛选最确切的老大,也正是最长最相配的那二个。详细相称进程如下:

  1. 非常全体前缀字符串;
  2. 只要有叁个=概念的标准相配前缀字符串,截至继续合营;
  3. 如果^~在最长相称的前缀字符串以前,将忽略正则说明式;
  4. 存储最长的非凡前缀字符串;
  5. 合作正则表达式;
  6. 找到第二个相相配的正则表明,停止相称过程,并实施该location指令;
  7. 只要未有正则表达式相配,则动用第4部存款和储蓄的最长前缀字符串;

=修饰符的头角峥嵘应用是相称
/号令。针对高频探望/的情况,将location参数设置为= /能够加速管理过程,因为全体相配进程在率先条之后就停止了。

location = / {
    ...
}

location一声令下内足以配备哪些管理央浼:管理静态文书档案或将倡议转载给代理服务器。在上边包车型地铁例子中,相称首个location的伸手能够访谈/data目录的公文,相称第二个location的伸手将被转接到www.example.com服务器。

server {
    location  {
        root /data;
    }

    location / {
        proxy_pass http://www.example.com;
    }
}

其中root命令钦命了静态文件的文件系统路线,将与央求UHighlanderI一齐构成静态文件的一心路线。在上述例子中,诉求xample.png将赶回服务器上位居/dataxample.png的文件。

proxy_pass一声令下将呼吁转发到代理服务器,并将代理服务器的响应重返给顾客端。在上述例子中,全数不是以“起头的ULacrosseI诉求都将被转接到代理服务器。

图片 1

配置 location


nginx 可依靠要求的
U安德拉I,将拜访流量转载给分化的后端服务器,或许将分歧的公文提供给顾客端。那一个功用由
location
指令定义,location 指令在 server 区块中定义。

举例,你能够定义四个 location
区块,将后生可畏部分伸手转载给叁个后端服务器,将另风流倜傥部分须求转发给另二个区别的后端服务器,余下的倡议从地点的文件系统中提供客商端所乞请的文书。

当二个央求提交了某些虚构主机之后,nginx 将倡议的 UMuranoI
与该设想主机内部存款和储蓄器有的 location 指令的定义进行相比,然后将呼吁映射到极度的
location 之中。

在各种 location 区块中,平日能够停放更加的多的 location
指令(有个别不生龙活虎),用于进一层对诉求实行分组管理。

Note: 在本文中,location 那几个词只象征多个独门的 location
上下文。

location 指令可定义二种参数:

  • 前缀字符串(路线名)
  • 正则表明式

设若贰个号令的 UKoleosI 以有些 前缀字符串 为起始,则与该 location 匹配。

上边举叁个 前缀字符串 的事例,在上面包车型大巴例子中,该 location 的参数为
/some/path/ ,它能相称相符于 U奥迪Q3I 为 /some/path/document.html
的请求:

location /some/path/ {
    ...
}

正则表明式必得包括前缀 ~~*(忽视大小写)。在底下的事例中,该
location 可合作饱含 .html 或者 .htm 的请求:

location ~ \.html? {
    ...
}

为了找到有些 UEvoqueI 的特级相称,nginx 首先相比较 U昂科拉I 和 前缀字符串,然后比较U帕杰罗I 和 正则表明式。

正则表达式具有越来越高的优先级,除非正则表达式使用了 ^~ 修饰符。

在享有相称的 前缀字符串 中,nginx
选用之中最长及最完好的前缀字符串所对应的 location。

上面是可信赖的搜寻 loction 的进度:

  1. 将 UEscortI 与具有的 前缀字符串 进行比较
  2. 修饰符 = 表示 URI 与 前缀字符串
    必需可信赖相称。假使能够正确相称,则截至查找
  3. 假定在杰出的最长的 前缀字符串 前增加了 ^~
    修饰符,则不会再自己议论正则表明式
  4. 封存相配的最长的 前缀字符串
  5. 测量试验 U传祺I 和 正则表明式的相称情状
  6. 假如找到相配的正则表明式,则截止查找,并动用相应的 location
  7. 要是未有相称的正则表明式,使用保留匹配的最长的 前缀字符串

只要对于 / 的伸手很频仍,可为 location / 增多 =
修饰符,那样能够加快管理进程,因为二回相称查找就能够甘休:

location = / {
    ...
}

在 location
区块中,可合营将呼吁转载给后端服务器。在上边包车型客车例证中,对于相称第二个location 的乞请,将被转发给
www.example.com

server {
    location  {
        root /data;
    }

    location / {
        proxy_pass http://www.example.com;
    }
}

root
指令内定了提供静态文件的本土路线。假若央求的 U福特ExplorerI 相配第叁个 location,将
U锐界I 追加到 /data
之后就能够获取文件的拜会路线:/data/URI。比方央求的 U索罗德I 为
xample.png,nginx 将 /dataxample.png
文件重临给客商端。

proxy_pass
指令用于将央浼转载给后端服务器,参数值即为后端服务器的访谈路径U奥迪Q5L。从后端服务器取回响应之后,nginx
再转载给顾客端。在上头的例证中,全体不以 ** 最早的
UTucsonI,对应的央浼将被转载给后端服务器。

应用变量

通过在安排文件中行使变量,能够让Nginx以分裂的格局管理诉求。变量的值在运作时计算获得,并可视作参数字传送递给指令。变量必得以$起来。变量基于Nginx的动静定义消息,如正被拍卖诉求的性质。

Nginx富含众多预设的变量,如core HTTP变量集,也得以利用setmapgeo命令来自定义变量。大繁多变量都在运营时计算值,那几个值通常都蕴涵有个别央浼的相关音讯。如$remote_addr包含了IP地址,而uri则带有了方今访谈的URI

下载地址 | 立异表明

确立设想服务器


在 nginx 配置文件中,必需包括最少三个 server 指令,server
指令定义了一个设想服务器。当二个伸手到来时,nginx
首先要调整选取哪贰个伪造服务器管理该伏乞。

server 指令在 http context 中开展定义,譬如:

http {
    server {
        # Server configuration
    }
}

http context 中,可增加多少个 server 指令以定义多个虚构服务器。

server 区块中,日常会包含八个
listen
指令。listen 指令是用以定义该设想服务器监听于哪个 IP地址
端口(也许定义三个 Unix socket 文件及路线)。IP地址可为 IPv4 或 IPv6
地点;IPv6 地点应归入方括号中。

以下是一个事例,该服务器监听于 127.0.0.1 和 8080 端口:

server {
    listen 127.0.0.1:8080;
    # The rest of server configuration
}

风姿浪漫经不点名端口地址,将利用专门的职业的端口地址,即 80 端口。倘使不点名 IP
地址,将监听于全部 IP 地址之上。假诺 server 区块中一直不包罗 listen
指令,根据一流客户的权力,将利用 标准的 80/tcp 端口只怕 默认的
8000/tcp 端口。

要是还要有四个 设想主机 相称了诉求的IP地址和端口,nginx 将测量检验哀求的
Host 首部字段,将它与 server 区块中的
server_name
指令的配备进行自己检查自纠。server_name
指令的值有三种:确切的主机名通配主机名正则表明式主机名。通配主机名在其开场、或最后有叁个
* 符号,大概伊始和结尾都有一个 * 符号,*
可匹配猖狂长度的字符串;nginx 的正则表达式包容 Perl
的正则语法,在正则表明式早先需有~前缀。

以下是有关 正确的主机名 的例子:

server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

万风姿浪漫有四个 server_name 内定的主机名与央浼首部的 Host
字段相配,nginx 按如下的事前次序选取,当找到第三个能相称的 server name
就告大器晚成段落查找:

  1. 确切的主机名
  2. 以 “*” 初始的最长的通配主机名,比方 *.example.org
  3. 以 “*” 结尾的最长的通配主机名,例如 mail.*
  4. 率先个门户大致的正则表明式(遵照安插文件中的顺序)

只要未有找到与 Host 字段相称的 server name,nginx
将把要求路由到该端口地址的 暗中同意的虚拟主机
如果未有特别钦命,暗许的设想主机 就是 nginx.conf
文件中的第一个概念的 设想主机。也能够使用 listen 指令的
default_server 参数字突显式地钦点多少个虚构主机为 暗中认可的虚构主机

server {
    listen      80 default_server;
    ...
}

增加设想服务器

Nginx配置文件中最少含有一条定义虚构服务器的server指令。当Nginx管理二个号召时,第多少个被入选的假造服务器将用以拍卖该乞求。

设想服务器通过http指令中的server命令来定义,示比方下:

http {
    server {
        # 服务器配置
    }
}

http中得以蕴含多条server一声令下来定义八个设想服务器。

通常server指令中会包蕴一条listen命令,用于钦定该设想服务器将在监听的IP地址和端口。示比方下:

server {
    listen 127.0.0.1:8080;
    # 其他配置
}

即使不填写端口,则动用典型端口。借使不填写ip地址,则监听全部地方。假设缺点和失误整条listen指令,则标准端口是80/tcp,暗许端口是8000/tcp,由一级客商的权能决定。

借使有多少个server配置了雷同的ip地址和端口,Nginx会相配server_name一声令下与需要尾部的host字段。server_name一声令下的参数能够是正确的文本、通配符或正则表达式。通配符能够在字符串的底部、尾巴部分或两端包涵**能够合作任性字符。Nginx接受Perl格式的正则表达式,以~始于。以下是两个纯正相配的例证:

server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

譬如有多个server_name匹配host字段,Nginx依照以下准绳选用第三个相相称的server管理央求:

  1. 正确相称
  2. *开班的最长通配符,如*.example.org
  3. *最后的最长通配符,如mail.*
  4. 第二个十分的正则表达式(依据在陈设文件中冒出的前后相继顺序)

比如找不到其余与host字段相相称的server_name,Nginx会依据须要端口将其发送给暗中认可的server。私下认可server就是配置文件中首先个冒出的server,也得以通过default_server点名有些server为暗中同意server,如下所示:

server {
    listen      80 default_server;
    ...
}

回来内定的状态码


在有一些景况下,譬如当一个页面已经被一时或长久地活动到任何任务,访问这种
web 站点的 U奇骏I 时须要马上重返二个错误码或然重定向码。最轻松的主意是接受
return
指令:

location /wrong/url {
    return 404;
}

return
指令的率先个参数是响应状态码。第二参数是可选的,能够是叁个重定向的
U奇骏L(for codes 301, 302, 303, and 307),大概是放入响应 body
的生机勃勃段文本。比如:

location /permanently/moved/url {
    return 301 http://www.example.com/moved/here;
}

return 指令可放入 location 和 server 上下文中。

重写HTTP再次来到新闻

sub_filter指令支持重写或更换HTTP须要的响应内容,如替换有些字符串。该指令帮衬变量和链式替换。

下例中,将针对服务器的链接改为指向代理服务器的链接:

location / {
    sub_filter      /blog/ /blog-staging/;
    sub_filter_once off;
}

另三个例子是将http央求改为https央浼,并将央浼底部的本地主机地址改为主机名。sub_filter_once一声令下用于告诉Nginx是还是不是延续进行location中的sub_filter指令。

location / {
    sub_filter     'href="http://127.0.0.1:8080/'%20%20%20%20'href="https://$host/';
    sub_filter     'img src="http://127.0.0.1:8080/'%20'img%20src="https://$host/';
    sub_filter_once on;
}

注意:被sub_filter一声令下改良后的从头到尾的经过将不会再被其它sub_filter一声令下修改。

从高档期的顺序来讲,配置 nginx 为八个 web 服务器,重纵然概念:

重写诉求中的U福特ExplorerI

在管理央求进度中,能够经过rewrite命令重复改进央浼的ULacrosseI。rewrite指令富含2个必填参数和1个可选参数。第一个参数是哀告U奥迪Q3I必得合营的正则表明式。第一个参数是要替换的目的UEnclaveI。第八个为可选参数,能够是二个是不是继续施行后续rewrite命令的标识,也得以发送多少个重定向指令(状态码是301或302卡塔尔国。示举个例子下:

location /users/ {
    rewrite ^/users/(.*)$ /show?user=$1 break;
}

locationserver中都能够分包多个rewrite指令。Nginx从上到下依次磁性rewrite命令,每一次走入server一声令下块时,rewrite指令都会被实行一遍。

Nginx施行完后生可畏多元rewrite命令后,依照新型的U奥德赛I来抉择location指令。如果location中也隐含rewrite一声令下,它们也将被每一个推行,实施达成后将重新选拔location

上边是二个rewritereturn风流倜傥道协作行使的例证。

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

以此例子用于区分两套差别的USportageI。相近于/download/some/media/file的UHavalI将被改写为/download/some/mp3/file.mp3。由于最终的标志last,Nginx将忽视随后的两条指令,然后以新的UPortofinoI继续管理央求。同样地,相符于/download/some/audio/file的U卡宴I将被改写为/download/some/mp3/file.ra。假如乞请UEscortI都不一致盟上述两条rewrite指令,Nginx将回来403错误代码。

rewrite指令能够分包以下三种参数,用于中断管理进度:

  • last –
    甘休实施业前serverlocation中的rewrite指令,并以新的U途睿欧I查找新的location;
  • break –
    停止施行业前上下文境况内的rewrite指令,并不以新的ULANDI查找新的location;

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注