nginx正则匹配优先级配置

本文深入解析Nginx中rewrite与location的功能差异及应用技巧,阐述如何利用rewrite进行URL重写与重定向,同时对比其与location在路径控制与资源访问上的不同。掌握这些核心概念,将有效提升Nginx配置效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(location =) > (location 完整路径 ) > (location ^~ 路径) >  (location ~* 正则) > (location 路径)

Rewrite规则

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

  1. 执行server块的rewrite指令
  2. 执行location匹配
  3. 执行选定的location中的rewrite指令

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

### Nginx 中使用正则表达式进行 URL 匹配Nginx配置文件中,`location` 指令可以用于定义如何处理特定的 URI 请求。当 `location` 使用正则表达式时,Nginx 将按照顺序逐一测试这些模式,并执行第一个成功匹配的规则。 对于带有正则表达式的 `location` 块,语法如下: ```nginx location ~* 正则表达式 { # 处理逻辑... } ``` 其中 `~*` 表示不区分大小写的正则匹配;如果去掉星号,则表示区分大小写[^3]。 #### 实际案例分析 考虑一个需求:任何尝试访问形如 `/abc/123.html` 这样的具体页面都应被重定向至网站首页。这可以通过下面这段配置实现: ```nginx server { listen 80; server_name www.lic.com; location ~* ^/abc/123\.html$ { rewrite ^ http://www.lic.com permanent; } ... } ``` 这里的关键在于正则表达式部分 `^/abc/123\.html$`: - `^` 和 `$` 分别代表字符串的开头和结尾,确保整个路径完全匹配; - `\.` 对点字符进行了转义,因为在正则里`.` 是特殊符号[^1]。 #### 关于优先级 值得注意的是,在多个可能适用的位置块之间,带前缀的非正则位置声明(即那些以普通字符串而非正则表达式形式给出的位置)具有更高的优先权。而一旦某个正则表达式匹配成功,即使后面还有其他更精确的规则也不会再继续检查了。 例如,如果有两个这样的设置: ```nginx location ^~ /static/ { alias /data/static/; } location ~ \.(jpg|jpeg|png)$ { expires max; } ``` 那么所有以 `/static/` 开头的请求都会直接交给第一个规则来处理,即便它们也可能满足第二个条件——图片扩展名的要求。 #### 定向代理功能 除了简单的静态资源分发外,Nginx 还经常扮演反向代理的角色,负责把某些类型的动态请求转发给后端的应用程序服务器,像 PHP-FPM 或 Tomcat 等。此时同样可以用到基于正则表达式的路由控制[^2]: ```nginx location ~ \.php$ { fastcgi_pass unix:/run/php-fpm.sock; include snippets/fastcgi-php.conf; } ``` 此片段表明凡是 `.php` 文件都将通过 Unix Socket 发送给 FastCGI 来解析运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值