首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
Nginx Location映射规则总结归纳
返回列表
发新帖
Nginx Location映射规则总结归纳
[复制链接]
发表于 2025-5-24 09:47:36
|
显示全部楼层
|
阅读模式
❃博主首页 :
「码到三十五」
,同名公众号 :「码到三十五」,wx号 : 「liwu0213」
☠博主专栏 :
<mysql高手>
<elasticsearch高手>
<源码解读>
<java核心>
<面试攻关>
♝博主的话 :
搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技能干货的coder,一起筑基
Nginx的location指令是设置哀求路由的核心机制,其匹配规则直接影响哀求的处理流程。下面基于官方
文档
和实战经验的总结:
一、Location匹配规则与优先级
1. 匹配模式
Nginx支持5种location修饰符,优先级从高到低为:
修饰符阐明示例=
精确匹配
(最高优先级)location = /logo.png^~
最长前缀匹配
(匹配后停止正则查抄)location ^~ /static/~
正则匹配
(区分大小写,按设置文件顺序匹配)location ~ \.php$~*
正则匹配
(不区分大小写)`location ~* .(jpg无
平常前缀匹配
(按最长匹配原则,优先级最低)location /blog/
2. 优先级顺序
Nginx按以下顺序匹配location块:
精确匹配(=)
仅当哀求URI与location后的字符串
完全匹配
时生效。
正则匹配(~/~*)
按设置文件中的
书写顺序
依次匹配,首个匹配的正则生效。
最长前缀匹配(^~)
选择匹配URI前缀
最长
的location块。
平常前缀匹配
按最长匹配原则选择,若多个location匹配,选择
开始界说
的。
默认匹配(location /)
兜底处理未匹配其他规则的哀求。
3. 匹配示例
假设设置如下:
location = /exact { ... } # 精确匹配
location ^~ /prefix { ... } # 最长前缀匹配
location ~ \.png$ { ... } # 正则匹配(区分大小写)
location /general { ... } # 普通前缀匹配
location / { ... } # 默认匹配
复制
代码
哀求/exact → 匹配location = /exact。
哀求/prefix/long → 匹配location ^~ /prefix(^~优先级高于平常前缀)。
哀求/image.PNG → 匹配location ~* \.(jpg|png)$(不区分大小写的正则)。
哀求/general/path → 匹配location /general。
二、Proxy_pass路径处理规则
proxy_pass指令用于将哀求转发到后端服务,其路径拼接逻辑与location设置
精密相关
。
1. 路径拼接规则
场景示例设置哀求URI转发目标
proxy_pass带/结尾
location /api/ { proxy_pass http://backend/; }/api/userhttp://backend/user
proxy_pass不带/
location /api { proxy_pass http://backend; }/api/userhttp://backend/api/user
正则location
location ~ ^/app/(.*) { proxy_pass http://app/$1; }/app/v1/datahttp://app/v1/data
关键规则
:
带/
:proxy_pass的URL以/结尾时,
替换
location匹配的部门。
不带/
:proxy_pass的URL不带/时,
追加
location匹配后的完整路径。
2. 路径截取与重写
通过rewrite指令可动态修改转发路径:
location ~* ^/api/v1/ {
rewrite ^/api/v1/(.*) /$1 break; # 截取/api/v1/后的路径
proxy_pass http://backend;
}
复制
代码
哀求/api/v1/user/123 → 转发到http://backend/user/123。
3. 特别场景处理
Unix Socket转发
:
location /unix/ {
proxy_pass http://unix:/var/run/backend.sock:/;
}
复制
代码
制止301重定向
:
location /app {
proxy_pass http://backend;
}
# 请求/app(无结尾/)时,Nginx可能自动重定向到/app/
# 使用精确匹配避免:
location = /app {
proxy_pass http://backend;
}
复制代码
三、设置优化与最佳实践
精确匹配优先
将location =块置于设置文件顶部,减少正则匹配开销。
正则匹配顺序
将高频哀求的正则规则前置,提升匹配效率。
路径计划同等性
确保location和proxy_pass的URL格式(是否带/)同等,制止路径拼接错误。
监控
使用error_log和access_log跟踪匹配过程,优化设置。
四、完整设置示例
server {
listen 80;
server_name example.com;
# 精确匹配静态文件
location = /favicon.ico {
log_not_found off;
access_log off;
root /var/www/icons;
}
# 最长前缀匹配
API
请求
location ^~ /api/ {
proxy_pass http://api_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 正则匹配图片资源(不区分大小写)
location ~* \.(jpg|png|gif)$ {
expires 30d;
root /var/www/images;
}
# 默认匹配
location / {
root /var/www/html;
index index.html;
}
}
复制代码
设置阐明
:
精确匹配favicon.ico,关闭
日志
提升
性能
。
^~ /api/匹配所有以/api/开头的哀求,转发到后端服务。
正则匹配图片文件,设置30天缓存。
未匹配的哀求由location /处理,返回静态文件。
关注公众号[码到三十五]获取更多技能干货 !
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
浏览过的版块
网络安全
花瓣小跑
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表