nginx转发配置详解Nginxlocation配置分析nginx转发配置




nginx转发配置详解Nginxlocation配置分析nginx转发配置

2022-07-21 2:24:18 网络知识 官方管理员

Nginx——location常见配置指令alias、root、proxy_pass

前面说出了一篇关于Nginx安装的文章,这篇就这说下关于Nginx中location的配置,这个很重要。

日常使用中会遇到一个nginx指向不同的系统。页面也好,接口也好,都会进行location的路径匹配和下发,如果location的路径配置规则和优先级不清楚的话,会很麻烦。言归正传,下面开始。

01【alias】

别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【alias】配置的路径。如:

location/test/{

alias/home/sftp/img/;

}

即:请求/test/1.jpg(省略了协议与域名),将会返回文件/home/sftp/img/1.jpg。

02【root】

根路径配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【root】配置的路径,并把location配置路径附加到其后。如:

location/test/{

root/home/sftp/img/;

}

即:请求/test/1.jpg(省略了协议与域名),将会返回文件/home/sftp/img/test/1.jpg,相较于alias,使用root会把/test/附加到根目录之后。

即:请求/test/1.jpg(省略了协议与域名),将会返回文件/home/sftp/img/1.jpg。

03【proxy_pass】

反向代理配置,用于代理请求,适用于前后端负载分离或多台机器、服务器负载分离的场景,在匹配到location配置的URL路径后,转发请求到【proxy_pass】配置的URL,是否会附加location配置路径与【proxy_pass】配置的路径后是否有"/"有关,有"/"则不附加,如:

location/test/{

proxy_passhttp://127.0.0.1:8080/;

}

即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/1.jpg(未附加/test/路径)。

location/test/{

proxy_passhttp://127.0.0.1:8080;

}

即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/test/1.jpg(附加/test/路径)。

location/test/{

proxy_passhttp://127.0.0.1:8080/img;

}

即:请求/test/1.jpg(省略了协议与域名),将会被nginx转发请求到http://127.0.0.1:8080/img1.jpg(未附加/test/路径,但附加了/test/之后的路径)。

03location语法规则

location[=||*|^~]/uri/{…}

nginx转发配置详解(Nginxlocation配置分析)(1)

匹配优先级

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

1.精确匹配=

2.前缀匹配^~

3.按文件中顺序的正则匹配

4.匹配不带任何修饰的前缀匹配

5.交给/通用匹配

当有匹配成功时候,停止匹配,按当前匹配规则处理请求

注意:前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配:location/dir01与location/dir01/dir02,如有请求将最终匹配到location/dir01/dir02

示例

nginx配置示例:

location=/{

echo"规则A";

}

location=/login{

echo"规则B";

}

location^~/static/{

echo"规则C";

}

location^~/static/files{

echo"规则X";

}

location~\.(gif|jpg|png|js|css)${

echo"规则D";

}

location~*\.png${

echo"规则E";

}

location/img{

echo"规则Y";

}

location/{

echo"规则F";

}

那么产生的效果如下:

访问根目录/,比如将匹配规则A

访问将匹配规则B,http://localhost/register则匹配规则F

访问将匹配规则C

访问将匹配规则X,虽然规则C也能匹配到,但因为最大匹配原则,最终选中了规则X。你可以测试下,去掉规则X,则当前URL会匹配上规则C。

访问将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而则优先匹配到规则C

访问则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。

访问会匹配上规则D,虽然规则Y也可以匹配上,但是因为正则匹配优先,而忽略了规则Y。

访问会匹配上规则Y。

访问则最终匹配到规则F,因为以上规则都不匹配,这个时候应该是Nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),Nginx作为反向代理服务器存在。


发表评论:

最近发表
网站分类
标签列表