前言
今天我们将一起探讨 Nginx 反向代理与负载均衡中的一个重要环节——location
配置的优先级。通过本文,你将对 Nginx 的 location
匹配规则有更深入的了解。
环境搭建
在开始之前,我们需要准备一个简单的实验环境:
- 主服务器:192.168.10.50
- 代理机 1:192.168.10.51
- 代理机 2:192.168.10.52
- 代理机 3:192.168.10.53
所有机器均使用 Ubuntu 系统。
准备工作
- 机器准备:准备好 4 台机器,其中 1 台作为主服务器,其余 3 台作为反向代理机。你可以使用虚拟机来快速克隆多台机器。
- 软件选择:不推荐使用官方的 Nginx 包,因为它没有集成插件,使用起来不太方便。推荐使用第三方如 OpenResty 或宝塔,它们的运维管理更友好。(本文以宝塔为例)
- 镜像源切换:如果你还不了解如何切换镜像源,可以参考我之前的推文。
- SSH 开启:如果你还不了解如何开启 SSH,也可以参考我之前的推文。
- 统一管理:建议使用 SSH 连接来统一管理四台服务器。
- 安装宝塔并配置 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/ee
、http://192.168.10.50/aa
或 http://192.168.10.50/bb
都将返回 “ZhengZe”。
总结
以下是 location
匹配的优先级总结:
location /
:匹配所有请求。location = /pwd
:仅精确匹配指定的pwd
路径,若未配置其他,则返回 404。location ^~ /pwd
:次高匹配,如果匹配pwd
路径,不再匹配正则。location ~ /pwd
:使用正则匹配pwd
路径,区分大小写。location ~* /url
:使用正则匹配,不区分大小写。
希望本文能帮助你更好地理解 Nginx 的 location
配置优先级。如果你有任何问题或建议,欢迎在评论区留言交流。