location模块与rewrite重定向

这篇具有很好参考价值的文章主要介绍了location模块与rewrite重定向。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

location

常用的nginx正则表达式

URI

location分类

location常用的匹配规则

location优先级

location实例说明

优先级总结

在实际网站中使用的匹配规则至少有三个匹配规则

rewrite

rewrite执行顺序

nginx的内置变量


location

常用的nginx正则表达式

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

URI

Uniform Resource Identifier,统一资源标识符)是一种字符串标识符,用于标识抽象或物理资源,
如文件、图片、视频等。

它由多个组件组成,包括协议、主机名、端口号、路径等,例如 http://www.kgc.com:8080/index.html 就是一个 URI。

在 Nginx 中,匹配的对象通常是 URI 的一部分,比如 /index.html、/images/logo.png 等。
 

location分类

1、精准匹配:location = / {...}
2、一般匹配:location / {...}
3、正则匹配:location ~ / {...}

location常用的匹配规则

=:进行普通字符精确匹配,也就是完全匹配
^~:表示普通字符匹配,使用前缀匹配,如果匹配成功,就不再匹配其他的location
~:区分大小写的匹配
~*:不区分大小写的匹配
!~:区分大小写的匹配取非
!~*:不区分大小写的匹配取非

location优先级

首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配~或者~*
然后匹配不带任何修饰的前缀匹配
最后是交给/通用匹配

location实例说明

(1)location = / {}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/匹配,/abcd不匹配。若 location  /abc,
则即匹配/abc 、/abcd/ 同时也匹配 /abc/。

(2)location / {}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)
 

3)location ^~ /test {}
匹配任何以 /images/ 开头的地址
location ^~ /test {
    root html;
    index index.htm index.html;

  }

(4)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则
#不区分大小写

优先级总结

(location = 完整路径)> (location ^~ 完整路径)>(location ~,~* 正则顺序) > (location 部分起始路径) > (location /)

在实际网站中使用的匹配规则至少有三个匹配规则

#第一个必选规则
直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
可以是个静态首页,可以直接转发给后端应用服务器

location = / {
   root  html;
   index index.html index. htm;
}

第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {
    root /webroot/static/;
}

location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

第三个规则就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求

location / {
    proxy_pass http://tomcat_server;
}

rewrite

重定向,rewrite使用nginx全局变量或是自己设置的变量,结合正则表达式和标志位实现URL的重定向

重定向,rewrite使用nginx全局变量或是自己设置的变量,结合正则表达式和标志位实现URL的重定向

rewrite执行顺序


1、执行server块当中的rewrite的

2、执行location匹配

3、如果location当中还有rewrite,继续执行。

不停的rewrite会陷入死循环,十次后报错,报错状态码:500

X_Forwarded_For
用于获取HTTP请求头中的X-Forwarded-For字段的值。 X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。 proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。

X-Real-IP
头部为客户端真实IP地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。 这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。

nginx的内置变量


$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。 $remote_port: 客户端的端口号。 $server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。 $document_root: 当前请求的根目录。 $server_name: 服务器名称,用于匹配server块的server_name指令。

content-type
location / {

root html; index index.html index.htm;

default_type text/plain; return 200 "way:$request_method";

}

default_type text/plain;

表示如果没有在其他地方显示设置: conte

nt-type的头字段,默认响应为text/plain纯文本格式

text/plain默认响应类型,也就是页面

text/plain 纯文本格式,类似于.txt

text/css CSS样式的类型

text/javascript Java脚本,.js 前端文件,也可以理解为Java解析的程序文件

rewrite的语法
rewrite <regex><replacement>[flag]

rewrite 开始重定向

regex 正则匹配的规则

replacement 替换内容,重定向的新url路径

[flag] 标志位

permnaent 永久重定向 返回码301

redirect 临时重定向返回码302

永久重定向 301 会永久性的变更URL,搜索引擎会转移它的权重以及排名到新的URL

临时重定向: 302,用于短期变更(网站维护,或者升级更新)索引擎不会转移它的权重以及排名到新的URL

304 表示获取的是本地缓存

break 是重定向,但不会改变URL,而且只会请求一次,并跳出当前匹配,即刻终止

last 本条规则匹配完成后,继续向下匹配,匹配时要注意防止死循环

rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location,10次,返回码500
 文章来源地址https://www.toymoban.com/news/detail-639488.html

到了这里,关于location模块与rewrite重定向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx正则表达式、location匹配、Rewrite重写详解

    ^ 匹配输入字符串的起始位置 $ 匹配输入字符串的结束位置 * 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” + 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o” ? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“

    2024年02月07日
    浏览(87)
  • Nginx快速入门:return、rewrite重定向、重写详解(六)

    我们在日常的生产过程中,常常有需要重定向转发的需求,比如企业更换了域名,但又要保证之前的域名能访问,这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置,今天继续来补充关于转发的的最后一个环节——重定向(或称跳转)

    2024年02月20日
    浏览(39)
  • nginx重定向问题解决(rewrite or internal redirection cycle)

    访问日志文件 nginx.conf配置文件内容 根据提供的访问日志和nginx.conf配置文件分析,是循环重定向的问题。 配置中,location / 块使用了 try_files $uri $uri/ /index.html; 会导致导致在尝试访问根目录时发生重定向循环。 修改:添加一个新的 location=/index 块,直接提供 /index.html 而不进行

    2024年02月05日
    浏览(68)
  • nginx之location的优先级和nginx的重定向

    nginx的正则表达式 符号 含义 ^ 字符串的起始位置(以什么开头) $ 字符串的结束位置(以什么结尾) * 匹配所有 + 匹配前面的字符最少1次 ? 匹配前面的字符0次或者1次 . 任意单个字符 {n} 连续重复出现n次 {n,m} 连续重复n-m次 [c] 匹配单个字符c () 分组 | 或 1、精确匹配:完整路

    2024年02月03日
    浏览(38)
  • 【Nginx06】Nginx学习:HTTP核心模块(三)Location

    Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些

    2024年02月15日
    浏览(38)
  • Location匹配与Rewrite重写

    1.location大致可以分为三类: 精准匹配:location = / {} 一般匹配:location / {} 正则匹配:location ~ / {} 2.location常用的匹配规则:   = :进行普通字符精确匹配,也就是完全匹配。 ^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。 ~ :区分大小写的

    2024年02月13日
    浏览(42)
  • nginx命名location跳转的模块上下文继承

      nginx提供了非常棒的功能,命名location,如文章nginx的location匹配规则中描述,有时候我们可以通过lua脚本(在openresty中)或者自研nginx插件模块,根据相应的业务规则将某些请求转发到特定的命名location中执行相应的业务逻辑。   假设我们的location配置如下:   那么ngi

    2024年02月20日
    浏览(24)
  • nginx文件共享、服务状态和location模块的配置介绍

    目录 一.文件共享功能 1.清空html目录下文件并新建你要共享的文件 2.修改nginx.conf文件,开启autoindex功能 3.测试  二.状态模块 1.修改nginx.conf文件 2.测试 (1)使用刚才定义的IP/nginx_status进行访问 (2)status参数介绍 三.location模块的配置 1.location的语法 2.location的介绍 (1)uri是

    2024年02月13日
    浏览(37)
  • nginx rewrite 用法,用rewrite去除URL中的特定参数

    日常服务中经常会用Nginx做一层代理转发,把Nginx当做前置机 比如,以下配置: 这里的rewrite 就是为了去除URL中的/apis,实际的后端api中是没有这个参数的,但是为了做到在Nginx转发请求,前端需要加上这个参数,以便于区别 比如前端的请求地址是 那么实际上经过Nginx转发后请求

    2024年02月05日
    浏览(40)
  • Nginx rewrite

    目录 一、location 1.location 匹配规则介绍 2. 实际网站使用中匹配规则 2.1第一个必选规则 2.2第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 2.3第三个规则就是通用规则 3.location 匹配规则演示 2.1一般前缀匹配 2.2正则匹配 2.3正则前缀匹配 2.4精准匹配 二、re

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包