网站首页 > 技术教程 正文
Nginx的rewrite和location的功能都能实现跳转,主要区别在于rewrite常用于server内更改获取资源的路径,而location是对一类路径做控制访问和反向代理,可以proxy_pass到其他服务器。Nginx通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。默认已经安装该模块,需要在安装时加上PCRE支持。
结合Nginx的变量、正则表达式、标志位实现url重写以及重定向。rewrite生效位置是server{},location{},if{}中,并且只能对域名后边的document_uri起作用。
Location
location ~* /js/.*/\.js { # 正则匹配
root /webroot/res/; # 静态资源,root或alias
}
location / { # 普通请求或/login等
proxy_pass http://tomcat:8080/index # 动态请求
}
location 基本语法是:location [=|~|~*|^~|@] pattern{……}。URL的配置规则:
- 以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
- 以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配。
- 以~ 开头,表示区分大小写的正则匹配。
- 以~* 开头,表示不区分大小写的正则匹配。
- !~和!~*分别是对上面两个的规则取非。
- @,定义命名location区段,这些区段客户端不能访问,只能内部访问。
- 以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到。
查找顺序和优先级
- 带有“=“的精确匹配优先
- 没有修饰符的精确匹配
- 正则表达式按照他们在配置文件中定义的顺序
- 带有“^~”修饰符的,开头匹配
- 带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
- 没有修饰符的,如果指定字符串与URI开头匹配
实际使用的一般规则匹配的结果分两种
- 一种是静态资源,如js/css/img/html等,使用root、alias定向到具体的目录;root是最上层目录定义,location中的路径会累加;alias是别名定义,路径不累加直接查找定义的目录下文件。
- 另外一种是动态请求,代理到后端的服务。
关于代理的URL拼接部分:
- location后面的url加上了“/”,影响了匹配规则,对URL拼接来说,只是将整个URL切成了:已经匹配部分+其余部分。
- proxy_pass后面的url加上了“/”就相当于是绝对根路径。proxy_pass后有“/”,就不拼接location的已经匹配部分。如果它后面没有“/”,就全拼接,即已经匹配部分+其余部分。
Rewrite
rewrite 是 nginx的静态重写模块,可在server,location,if中配置,而rewrite的模块中的return一旦执行就不会再处理接下来的模块了。
基本用法是 rewrite patten replace flag。patten是正则表达式,与patten匹配的URL会被改写为replace,flag可选。rewrite 后面可以加flag,flag标记有:
- last 相当于Apache里的[L]标记,表示完成rewrite,然后对重写的URI重新查找
- break 终止匹配, 不再匹配后面的规则,但是后续非rewrite语句可以执行
- redirect 返回302临时重定向 地址栏会显示跳转后的地址
- permanent 返回301永久重定向 地址栏会显示跳转后的地址
if 指令也是rewrite模块中的一个指令。其可作用于 server 和 location 块中,if指令不支持多条件、不支持嵌套、不支持else,语法是if (condition) { ... }。condition可以是如下类型:
- 变量名,如果变量的值是空字符串或者0表示false
- 可使用 字符串与变量做匹配 '=' 和 '!=' 。
- 也可以正则匹配 '~' 或 '~!'。
- 检测文件是否存在'-f' 或 '!-f' ,目录则是 '-d'。
- 检查文件,目录,软链接是否存在' -e' 或者 '!-e'。
- 检查是否为可执行文件,使用'-x' 或者 '!-x'。
return指令也是rewrite 模块提供的。基本语法是 return [code] [text]/URL;
error_page核心指令是当发生错误的时候能够显示一个预定义的uri。如error_page 404 /404.html; 或者error_page 404 =200 /empty.gif;(重置返回码)
变量
nginx的变量以符号$开始,变量分为两种,自定义变量与内置预定义变量,部分内置预定义的变量的值是可以改变的。自定义变量可以在sever,http,location等标签中使用set命令声明变量,语法如下“set $变量名 变量值”。所有的变量都是全局可见的(并不是全局变量),但是在不同的层级有各自的可见性。
猜你喜欢
- 2024-09-09 ingress-nginx常用注解指南(nginx详细讲解)
- 2024-09-09 Nginx反向代理常用配置(nginx反向代理设置)
- 2024-09-09 nginx+springboot使用https重定向的解决办法
- 2024-09-09 Nginx从0基础到进阶实战!运维工程师必看
- 2024-09-09 深度|掌握Nginx监控运维,这一篇足矣!
- 2024-09-09 详解nginx配置location总结及rewrite规则写法
- 2024-09-09 nginx 使用技巧配置(nginx 配置详解)
- 2024-09-09 nginx之Rewrite实战(nginx rewrite_by_lua)
- 2024-09-09 详解 Nginx配置静态内容服务器|附案例说明
- 2024-09-09 精品推荐!超简单Nginx开启SSL与重定向优化
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)