当前位置: 首页 > news >正文

Nginx 反向代理与负载均衡:深入解析 location 优先级

前言

今天我们将一起探讨 Nginx 反向代理与负载均衡中的一个重要环节——location 配置的优先级。通过本文,你将对 Nginx 的 location 匹配规则有更深入的了解。

环境搭建

在开始之前,我们需要准备一个简单的实验环境:

  • 主服务器:192.168.10.50
  • 代理机 1:192.168.10.51
  • 代理机 2:192.168.10.52
  • 代理机 3:192.168.10.53

所有机器均使用 Ubuntu 系统。

准备工作

  1. 机器准备:准备好 4 台机器,其中 1 台作为主服务器,其余 3 台作为反向代理机。你可以使用虚拟机来快速克隆多台机器。
  2. 软件选择:不推荐使用官方的 Nginx 包,因为它没有集成插件,使用起来不太方便。推荐使用第三方如 OpenResty 或宝塔,它们的运维管理更友好。(本文以宝塔为例)
  3. 镜像源切换:如果你还不了解如何切换镜像源,可以参考我之前的推文。
  4. SSH 开启:如果你还不了解如何开启 SSH,也可以参考我之前的推文。
  5. 统一管理:建议使用 SSH 连接来统一管理四台服务器。
  6. 安装宝塔并配置 Nginx:如果你还不了解如何安装宝塔,可以参考我之前的推文。

Nginx 安装

宝塔环境

在宝塔工具下直接搜索 Nginx 服务,或者直接搭建 LNMP 环境。

原生环境

# 直接安装
sudo apt-get install nginx# 或者指定版本
sudo apt-cache show nginx
sudo apt-get install nginx=1.10.3-0ubuntu0.16.04.5

配置需求与示例

默认匹配(最低优先级)

在主服务器上创建一个站点,默认匹配所有请求。

server {listen 80;server_name 192.168.10.50;default_type text/html;location / {echo "Waiting!";}
}

访问 http://192.168.10.50 将返回 “Waiting!”。

指定匹配(最高优先级)

location = /test {echo "This is Nginx Test";
}

访问 http://192.168.10.50/test 将返回 “This is Nginx Test”。

前缀匹配(次高优先级)

location ^~ / {echo "Hello Test";
}

访问 http://192.168.10.50/hello 将返回 “Hello Test”。

正则表达式匹配(第三优先级)

location ~ /.* {echo "ZhengZe";
}

访问 http://192.168.10.50/eehttp://192.168.10.50/aahttp://192.168.10.50/bb 都将返回 “ZhengZe”。

总结

以下是 location 匹配的优先级总结:

  1. location /:匹配所有请求。
  2. location = /pwd:仅精确匹配指定的 pwd 路径,若未配置其他,则返回 404。
  3. location ^~ /pwd:次高匹配,如果匹配 pwd 路径,不再匹配正则。
  4. location ~ /pwd:使用正则匹配 pwd 路径,区分大小写。
  5. location ~* /url:使用正则匹配,不区分大小写。

希望本文能帮助你更好地理解 Nginx 的 location 配置优先级。如果你有任何问题或建议,欢迎在评论区留言交流。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • windows下ardusub仿真
  • 探索Python中文拼音转换的奥秘:xpinyin库
  • [Redis] Redis中的String类型
  • jantic/DeOldify部署(图片上色)附带Dockerfile和镜像
  • c#语言写一个数组排序函数
  • DApp开发入门指南:从概念到实践
  • NX二次开发—批量导出点工具
  • Java高级Day40-QQ项目全代码
  • 物联网之PWM呼吸灯、脉冲、LEDC
  • 【Oracle篇】全面理解优化器和SQL语句的解析步骤(含执行计划的详细分析和四种查看方式)(第二篇,总共七篇)
  • memmove函数的使用与模拟实现
  • 基于人工智能的智能语音助手
  • DMDPC单副本集群安装
  • HarmonyOS开发实战( Beta5.0)滑动视频自动播放案例实践
  • Caffenie配合Redis做两级缓存,Redis发布订阅实现缓存一致更新
  • SegmentFault for Android 3.0 发布
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 230. Kth Smallest Element in a BST
  • 5、React组件事件详解
  • canvas 绘制双线技巧
  • Idea+maven+scala构建包并在spark on yarn 运行
  • IOS评论框不贴底(ios12新bug)
  • Laravel5.4 Queues队列学习
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • PHP面试之三:MySQL数据库
  • Python学习之路16-使用API
  • Redis在Web项目中的应用与实践
  • Spring Cloud Feign的两种使用姿势
  • vagrant 添加本地 box 安装 laravel homestead
  • VUE es6技巧写法(持续更新中~~~)
  • Vue.js 移动端适配之 vw 解决方案
  • 闭包--闭包作用之保存(一)
  • 关于使用markdown的方法(引自CSDN教程)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 利用DataURL技术在网页上显示图片
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何使用 JavaScript 解析 URL
  • 微信公众号开发小记——5.python微信红包
  • 异常机制详解
  • 译有关态射的一切
  • 怎么把视频里的音乐提取出来
  • 你对linux中grep命令知道多少?
  • NLPIR智能语义技术让大数据挖掘更简单
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 第二十章:异步和文件I/O.(二十三)
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # dbt source dbt source freshness命令详解
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #1014 : Trie树
  • #ifdef 的技巧用法
  • #LLM入门|Prompt#3.3_存储_Memory
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)SpringCloud 整合Python