前言
Nginx的location模块是配置网站访问规则的核心——它能根据客户端的请求路径,精准匹配并返回不同响应,比如指定静态资源目录、配置URL重写、设置错误页面等。很多新手配置Nginx时,会被location的符号(=、~、~*、^~)和优先级搞晕,导致规则不生效。本文用通俗的语言拆解location的4种核心写法、优先级顺序,搭配实操案例,代码可直接复制,新手也能快速掌握,轻松搞定Nginx访问匹配需求。

一、location核心语法与写法(4种必掌握)
location的核心作用是“匹配客户端请求路径”,语法格式固定,不同符号对应不同匹配规则,按需选择即可:
location [ 匹配符号 ] 请求路径(uri) {
匹配成功后的响应配置;
}
1. 精确匹配:=(优先级最高)
规则
:仅匹配与请求路径完全一致的地址,多一个字符、少一个字符都不匹配; 适用场景
:匹配固定的单一路径(如首页、特定接口),精准度最高,效率最快。
实操案例
# 1. 仅匹配 "http://www.linux.com/"(首页,精确匹配根路径)
location = / {
root /data/www;
index index.html;
}
# 2. 仅匹配 "http://www.linux.com/test"(精确匹配/test,不匹配/test/、/test123等)
location = /test {
root /data;
index index.html;
}
访问测试:
访问 http://www.linux.com/→ 匹配成功,加载/data/www/index.html;访问 http://www.linux.com/test→ 匹配成功,加载/data/test/index.html;访问 http://www.linux.com/test/(多了斜杠)→ 不匹配,触发其他location规则。
2. 正则匹配(区分大小写):~
规则
:使用正则表达式匹配请求路径,严格区分大小写(如/test和/Test是不同路径); 适用场景
:需要按文件后缀、路径格式匹配(如仅允许访问图片、PHP文件)。
实操案例
# 1. 匹配所有包含/test的路径(区分大小写,/Test、/TEST不匹配)
location ~ /test {
root /data;
index index.html;
}
# 2. 匹配后缀为jpg、jpeg、gif、png的图片文件(区分大小写,.JPG、.PNG不匹配)
location ~ \.(jpg|jpeg|gif|png)$ {
root /data/images;
expires 7d; # 图片缓存7天,提升访问速度
}
# 3. 匹配所有.php后缀的文件(仅处理PHP请求,区分大小写,.PHP不匹配)
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 转发给PHP-FPM处理
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
正则说明: $表示“结束”,确保仅匹配后缀为指定字符的路径;|表示“或”,匹配多个后缀。
3. 正则匹配(不区分大小写):~*
规则
:与 ~功能一致,唯一区别是不区分大小写(如/test、/Test、/TEST都能匹配);适用场景
:无需区分大小写的匹配(如允许用户随意输入后缀大小写访问图片、文件)。
实操案例
# 匹配所有.php后缀的文件(不区分大小写,.PHP、.Php、.php都匹配)
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 匹配图片文件(不区分大小写,.JPG、.GIF、.png等都匹配)
location ~* \.(jpg|jpeg|gif|png|bmp)$ {
root /data/images;
expires 30d;
}
优势:兼容性更强,避免用户因输入大小写错误导致访问失败。
4. 前缀匹配(非正则):^~
规则
:按请求路径的前缀匹配,不使用正则表达式,匹配到最长前缀后立即生效,不再检查其他正则匹配规则; 适用场景
:匹配固定前缀的目录(如/static、/admin),优先级高于正则匹配(~、~*),效率比正则高。
实操案例
# 匹配所有以/test开头的路径(/test、/test/、/test/abc、/test123等)
location ^~ /test {
root /data;
index index.html;
}
# 对比:无^~的前缀匹配(优先级低于正则)
location /test {
root /data/default;
index index.html;
}
关键区别:
若同时存在 ^~ /test和~ /test,访问/test会优先匹配^~ /test(前缀匹配优先级高于正则);无 ^~的前缀匹配(如location /test)优先级最低,仅在没有其他匹配规则时生效。
二、location优先级顺序(核心!避免规则冲突)
当一个请求能被多个location匹配时,Nginx会按“优先级从高到低”选择规则,这是配置不生效的核心原因,必须牢记:
优先级排序(从高到低)
精确匹配(=):完全匹配才生效,优先级最高;
前缀匹配(^~):匹配最长前缀后立即生效,跳过后续正则匹配;
正则匹配(~、~*):按配置文件中“从上到下”的顺序匹配,先配置的优先;
注: ~和~*属于同一优先级,谁在配置文件中写前面,谁先生效;普通前缀匹配(无符号):匹配最长前缀,仅在无其他规则匹配时生效;
默认匹配(location /):所有规则都不匹配时,触发该默认规则。
优先级实操验证(经典案例)
以下是配置文件中的location规则,通过访问测试理解优先级:
# 规则A:精确匹配根路径
location = / {
echo "配置A:精确匹配/";
}
# 规则B:默认匹配(所有路径都能匹配,优先级最低)
location / {
echo "配置B:默认匹配/";
}
# 规则C:普通前缀匹配/documents/
location /documents/ {
echo "配置C:普通前缀匹配/documents/";
}
# 规则D:前缀匹配/images/(^~)
location ^~ /images/ {
echo "配置D:前缀匹配(^~)/images/";
}
# 规则E:正则匹配图片后缀(不区分大小写)
location ~* \.(gif|jpg|jpeg)$ {
echo "配置E:正则匹配图片后缀";
}
访问测试结果(对应优先级)
访问 http://www.linux.com/→ 匹配规则A(精确匹配优先级最高);访问 http://www.linux.com/images/1.jpg→ 匹配规则D(^~前缀匹配,跳过正则规则E);访问 http://www.linux.com/documents/1.jpg→ 匹配规则E(正则匹配优先级高于普通前缀匹配C);访问 http://www.linux.com/test/123→ 匹配规则B(无其他规则匹配,触发默认规则);访问 http://www.linux.com/documents/test.txt→ 匹配规则C(普通前缀匹配,无更高优先级规则)。
三、实用拓展:location配置错误页面
通过location配合error_page指令,可自定义错误页面(如404、500页面),提升用户体验:
实操案例
# 1. 定义404错误页面:访问不存在的路径时,跳转至/sorry.html
error_page 404 /sorry.html;
# 2. 精确匹配/sorry.html,指定错误页面的存放目录
location = /sorry.html {
root /data/error; # 错误页面路径:/data/error/sorry.html
}
# 3. 拓展:定义500(服务器错误)、403(权限拒绝)错误页面
error_page 500 502 503 504 /50x.html;
error_page 403 /forbidden.html;
location = /50x.html {
root /data/error;
}
location = /forbidden.html {
root /data/error;
}
准备工作:在 /data/error目录下创建sorry.html、50x.html等错误页面文件,写入自定义内容(如“页面不存在,请检查路径是否正确”)。
总结
location核心:4种匹配符号(=、~、~*、^~)+ 优先级顺序,是配置生效的关键; 符号选择:精确匹配用 =,正则匹配用~(区分大小写)/~*(不区分),前缀匹配用^~;优先级避坑: ^~优先级高于正则,正则按配置顺序匹配,默认匹配(/)优先级最低;实用场景:静态资源(图片、JS)用 ~*匹配,固定目录用^~,特定路径用=,错误页面用error_page+location=。
掌握这些规则后,不管是配置静态资源访问、URL重写,还是自定义错误页面,都能精准匹配,避免规则冲突。建议新手多动手测试,熟悉优先级后就能灵活运用!
本文链接:https://www.kinber.cn/post/6213.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
