首页 > 系统相关 >Nginx Rewrite

Nginx Rewrite

时间:2024-06-10 13:44:45浏览次数:15  
标签:路径 匹配 rewrite URL Rewrite Nginx 域名 location

目录

1.常用的Nginx 正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字[0-9]   \s :空白符    \w :任意单词字符包括下划线[A-Za-z0-9_]
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。
rewrite 对访问的域名或者域名内的URL路径地址重写
location 对访问的路径做访问控制或者代理转发

2.location

location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发

location  URL路径       #一般前缀匹配
location = URL路径      #精准匹配
location ^~ URL路径     #前缀匹配
location ~ URL路径      #正则匹配,区分大小写
location ~* URL路径     #正则匹配,不分区大小写
location !~ URL路径     #正则匹配取反
location !~* URL路径    #正则匹配取反,不分区大小写


location匹配机制:
优先级:精准匹配 =  >  最长前缀匹配 ^~  >  正则匹配 ~ ~* !~ !~*  >  一般前缀匹配 /XXXX  >  通用匹配 /

注:在没有合适的精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果此最长匹配是带有^~的则不再看正则匹配;如果此最长匹配是不带有^~的则会继续再看正则匹配)
前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序,根据nginx配置文件的配置由上往下依次匹配,匹配到即停止

#网站首页匹配
location = / {
    root 网页根目录;
	index index.html;
}

#网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理
location ~ /static/ {
    root 目录;
}

location / {
    root 目录;
}

#网站动态页面,通过匹配不同的动态网页文件后缀转发给不同的后端应用服务器处理
location \.php$ {
    fastcgi_pass PHP服务器地址:端口;
}

location \.jsp$ {
    proxy_pass TOMCAT服务器地址:端口;
}

3.rewrite

rewrite 对用户的URL访问路径进行重写,再重定向跳转访问重写后的路径

rewrite格式
rewrite  正则表达式  重写的地址  [标记位];
                      
标记位
last 本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中
break 本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中
permanent 返回302临时重定向,浏览器地址会显示跳转后的URL地址
redirect 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

rewrite默认情况下只对从域名后面的根目录 / 开始到传递参数的 ? 号前面的URL路径进行重写

##默认只对域名后面的URL部分重写
rewrite 正则表达式 /新URL;                   
http://域名/旧URL  ->  http://域名/新URL    

##如果需要全域名路径重写需要加上协议和域名        
rewrite 正则表达式 http://新域名/新URL;       
http://旧域名/旧URL  ->  http://新域名/新URL;      
  
http://域名/旧URL  --rewrite重写-->  http://域名/新URL -->  location匹配新URL路径跳转页面


rewrite 正则表达式 /新URL  permanent;     #重写后会修改浏览器里的地址栏再重新访问
http://域名/旧URL  --rewrite重写-->  http://域名/新URL --> 浏览器地址栏也会改为 http://域名/新URL 再发起一次访问请求 -->  location匹配新URL路径跳转页面





location ~ URL路径正则表达式 {
    rewrite  正则表达式  重写的地址  [标记位];
}
    $request_uri
    if ($uri ~ URL路径正则表达式) {
    rewrite  正则表达式  重写的地址  [标记位];
}






$request_uri:包含请求参数的原始URI,不包含主机名
$uri:这个变量指当前的请求URI,不包括任何参数
$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数

标签:路径,匹配,rewrite,URL,Rewrite,Nginx,域名,location
From: https://www.cnblogs.com/zsy828/p/18230100

相关文章

  • 从零手写实现 nginx-13-nginx.conf 配置例子解释 + nginx 配置文件要如何解析?
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • Nginx图片下载不完整的处理过程
    Nginx图片下载不完整的处理过程背景昨天同事进行了nginx的迁移然后晚上发现图片展示不全.自己其实之前遇到过类似的问题但是因为熬夜比较久,脑子已经不转了.所以花了接近半小时才理清楚.感觉一些事情不记录一下,无法加深印象.问题现象客户的nginx从之前的CentOS迁移......
  • nginx快速分析日志并找出攻击IP
    第一步:分析NGINX日志分析日志主要目的是寻找那些异常活跃的IP地址,通过以下命令可以快速找出。 cataccess.log|awk'{print$1}'|sort|uniq-c|sort-rn|head-10命令说明:cataccess.log:将access.log文件的内容输出到标准输出。awk'{print$1}':awk是一个强大的文本......
  • 从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
    前言大家好,我是老马。很高兴遇到你。作为一个java开发者,工作中一直在使用nginx。却发现一直停留在使用层面,无法深入理解。有一天我在想,为什么不能有一个java版本的nginx呢?一者是理解nginx的设计灵魂,再者java开发者用java语言的服务器不是更加自然吗。于是......
  • 从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • Spring Boot、MongoDB、Vue 2和Nginx实现一个小说网站
    在本篇文章中,我们将带你逐步实现一个完备的小说网站项目,技术栈包括SpringBoot、MongoDB、Vue2和Nginx。1.项目概述我们将实现一个基本的小说网站,包含以下主要部分:后端API:使用SpringBoot实现,负责处理数据和业务逻辑。数据库:使用MongoDB存储小说数据。前端页面:使用Vue2实......
  • centos 环境 nginx 安装及常用命令简介
    一、引言Nginx是一个高性能的HTTP和反向代理服务器,因其卓越的性能、丰富的功能集、简单的配置和低资源消耗而广受欢迎。本文将详细介绍如何在CentOS系统中安装Nginx,并简要介绍一些常用的Nginx命令。二、在CentOS中安装Nginx1.先检查服务器GCC环境是否安装gcc-v2.......
  • Nginx访问日志
         Nginx日志是NginxWeb服务器产生的记录文件,主要用于跟踪和分析服务器的访问情况以及错误信息。Nginx日志主要分为两大类:访问日志(access_log):访问日志记录了每一次客户端对Nginx服务器的HTTP请求的详细信息,这对于统计分析、流量监控、用户行为分析等非常有用......
  • nginx监控
    1.监控nginx链接数状态status#1.开启status页面功能cat>/etc/nginx/conf.d/status.conf<<'EOF'server{listen80;server_namelocalhost;location/nginx_status{stub_statuson;access_logoff;}}EOF#2.访问测试[r......
  • nginx的负载均衡方式
    Nginx是一种高性能的HTTP和反向代理服务器,它具有强大的负载均衡功能。Nginx支持多种负载均衡策略,包括轮询、权重轮询、最少连接、IP哈希等。1.轮询(RoundRobin)轮询是Nginx的默认负载均衡方式,它将请求依次分配给每个后端服务器。配置:http{upstreamweb{ser......