8月8日上课内容 研究nginx组件rewrite

这篇具有很好参考价值的文章主要介绍了8月8日上课内容 研究nginx组件rewrite。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

location 匹配uri

location 匹配的规则和优先级。(重点,面试会问,必须理解和掌握)

nginx常用的变量,这个要求掌握

rewrite:重定向功能。有需要掌握,有需要理解的。

location匹配:

正则表达式:

元字符:

. :任意单个字符,包括汉字         \.转义符才表示.

^:起始位置

$:结束位置

*:匹配前面的字符0次或者多次

+:匹配前面的字符一次或者多次。

?:匹配一次或0次

\:转义符

[0-9A-Za-z]:匹配0-9,A-Z,a-z。

[a]:只能匹配a

{n}:连续重复出现几次,不连续不算,只能连续出现

{n,m}:最少出现几次,最多几次

():分组

|:逻辑或

正则表达式:匹配的是文件内容。(命令结果也算)

URI:统一资源标识符。是一种字符串,主要用于标识抽象的或者物理资源

主要匹配:文件 图片 视频等

nginx当中:uri

www.ky30.com/images/1.jpg

location 就是用来匹配uri的:

1、精确匹配:location = / (...)

2、正则匹配:location ~ / (...)

3、一般匹配:location / (...)

匹配规则:

=:精确匹配,完全匹配,错一个字都匹配不到,必须完全一致。

^~:匹配普通字符,前缀匹配

~$:结束位置。

~:区分大小写的匹配

~*:不区分大小写的匹配,取的逻辑非,取反

!~:区分大小写的匹配,取得逻辑非,取反

!~*:不区分大小写的取反。

掌握前缀、后缀匹配,精确匹配,不区分大小写匹配即可

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

The “/” request will match configuration A, the “/index.html” request will match configuration B, the “/documents/document.html” request will match configuration C, the “/images/1.gif” request will match configuration D, and the “/documents/1.jpg” request will match configuration E.

官网的说明:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

www.ky30.con/  www.ky30.com/test  www.ky30.com/document   www.ky30.com/images/

location越精确,越匹配(优先级越高)

http://www.example.com/gallery/images/cat.png
A)Location /gallery { }      
B)Location ~* /. (png|jpg)$ { }
C)Location = /gallery/images { }    
D)Location / { }

= /gally/images/cat.png
正确答案是B

匹配的优先级:

越精确,优先级最高

= 精确匹配优先级最高

~ 正则次之

/ 通用的优先级最低

例:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 8月8日上课内容 研究nginx组件rewrite,nginx,运维

 精确匹配

8月8日上课内容 研究nginx组件rewrite,nginx,运维

把精确匹配注释掉之后:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

8月8日上课内容 研究nginx组件rewrite,nginx,运维

优先级总结:

location = > location ^~ > location ~* > location /test/ > location /

完整路径 > 以什么为开头 > 不区分大小写匹配 > 标明路径 > 通用

一旦匹配到之后,不再向下匹配

生产中location匹配规则(面试题,很重要,必须掌握)

1、第一个规则:

location = / {}

直接匹配根网站,通过域名访问网站首页是最多的。使用精确匹配,可以加快处理速度。首页访问。(精确匹配)

2、第二个规则

处理静态文件请求,目录匹配
location ^~ /static/ {}(以什么为开头的格式,匹配静态页面)

3、location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {} 匹配图片用的

4、通用规则:

location / {
    proxy_pass ; 指定代理,反向代理,转发动态请求。.php.jsp的请求,发到后端
}

location /test/ {

}

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指令。

$remote_addr: 客户端的IP地址。

$remote_port: 客户端的端口号。

$server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

例: 

8月8日上课内容 研究nginx组件rewrite,nginx,运维

访问一下,就把客户端和服务端地址下载下来了

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 8月8日上课内容 研究nginx组件rewrite,nginx,运维

 打开看一下

8月8日上课内容 研究nginx组件rewrite,nginx,运维

如果不想下载下来,就再加一行

8月8日上课内容 研究nginx组件rewrite,nginx,运维

这个时候响应的内容就会直接反映在页面中,不会直接下载

8月8日上课内容 研究nginx组件rewrite,nginx,运维

再加上显示获取请求的方法:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

8月8日上课内容 研究nginx组件rewrite,nginx,运维

响应类型:

default_type test/pain;

表示如果没有在其他地方显示设置,content-type的头字段,默认响应为test/explain纯文本格式

text/html: 默认的响应类型,也就是我们说的页面。

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

text/css: CSS样式表的类型,.css
text/javascript:java脚本,js。前端文件,也可以理解是java解析的程序文件

原始ip与真实ip(重点,需要记)

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头部的值传递给后端服务器。

原始ip和真实ip地址这两个非常重要,是核心

不提供这两个ip,后端服务器会没有响应。

rewrite:重写,重定向

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

rewrite的执行顺序:

1、先执行server块当中的rewrite

2、再执行location匹配

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

不停rewrite,会陷入死循环,只能10次,然后报错,报错的状态码:500。

rewrite的语法:

rewrite <regex> <replacement> [flag]

rewrite:开始重定向
regex :表示正则匹配规则。


replacement :表示跳转后的内容,你要重定向的内容。
 

flag :标志位。(也很重要)

permanent :返回码301,永久重定向

例:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 8月8日上课内容 研究nginx组件rewrite,nginx,运维

(.*)什么内容,$1就是什么内容

请求一下,看一下效果

访问test,跳转到了ky30的内容

301永久重定向

200表示请求成功

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

redriect:临时重定向,显示的返回码:302

例:

vim nginx.conf

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 重启一下服务,访问看一下

返回码变为302了

8月8日上课内容 研究nginx组件rewrite,nginx,运维

永久重定向与临时重定向总结: 

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

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

304表示获取的是本地缓存

break

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

location / {

        rewrite /test/(.*) /ky30/$1 break;
        index index.html index.htm;

        }
也会跳转,uri没有发生变化,而且只会请求一次。

例:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

rewrite与break区别图示:

rewrite:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

break: 

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

last

last:本条负责匹配完成后,继续向下匹配,只要有last,就继续匹配。配置的时候需要注意,防止死循环


last:
  location /test1 {
         index index.html index.htm;
         rewrite /test1/(.*) /test2/$1 last;
        }

        location /test2 {
        index index.html index.htm;
        rewrite /test2/(.*) /test1/$1 last;

        }

        location /break {
        rewrite /break/(.*) /test1/$1 break;
        rewrite /test1/(.*) /test2/$1 break;
        index index.html index.htm;
        }

        location /last {
        rewrite /last/(.*) /test1/$1 last;
        rewrite /test1/(.*) /test2/$1 last;
        index index.html index.htm;
        }

8月8日上课内容 研究nginx组件rewrite,nginx,运维

8月8日上课内容 研究nginx组件rewrite,nginx,运维

重启一下,看一下日志文件:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

"rewrite or internal redirection cycle while processing"是Nginx中的一个错误信息,
它表示在处理请求时发生了重写或内部重定向循环。

写成死循环,一直在匹配location,循环最多可以执行10次,超过后nginx将返回500错误

这个错误通常是由于配置文件中的重写规则导致了一个无限循环。当Nginx进行重写或内部重定向时,如果新的URI再次匹配了原始的重写规则,就会产生循环,并导致错误。

location ~*.(jpg|png)$

rewrite /.gif

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

小实验:

基于域名的跳转

vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.kgc.com;
                                      #域名修改    
    #charset utf-8;
    #access_log  /var/log/nginx/kgc.com-access.log;                  #日志修改
    location / {
    #添加域名重定向
        if ($host = 'www.kgc.com'){                                #$host为rewrite全局变量,代表请求主机头字段或主机名
            rewrite ^/(.*)$ http://www.benet.com/$1 permanent;       #在重定向时,$1表示请求的URL
        }

        root   html;
        index  index.html index.htm;
    }

}

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

echo "192.168.233.61 www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx  把域名添加到hosts里面去

permanent
permanent: 永久性重定向,请求日志中的状态码为301。

实现效果:

访问kgc.com,跳转到了benet

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 8月8日上课内容 研究nginx组件rewrite,nginx,运维

F12看一下

也是请求两次,响应两次

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

基于ip地址的跳转

基于ip地址的跳转,用于页面维护,升级。

只有公司 IP :192.168.233.61访问正常。其他都显示维护中
vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.kgc.com;                       #域名修改    
    charset utf-8;
    access_log  /var/log/nginx/kgc.com-access.log;  #日志修改

    #设置是否合法的IP标记
    set $rewrite true;                             #设置变量$rewrite,变量值为boole值true
    
    #判断是否为合法IP
    if ($remote_addr = "192.168.233.61"){          #当客户端IP为192.168.233.61时,将变量值设为false,不进行重写
        set $rewrite false;
    }

                                                   #除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){                          #当变量值为true时,进行重写
        rewrite (.+) /error.html;                   #重写在访问IP后边插入/error.html,例如192.168.233.22/error.html
    }

    location = /error.html { #一定要用精确匹配
        root html;                                 #网页返回html/error.html的内容

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

8月8日上课内容 研究nginx组件rewrite,nginx,运维

nginx -t 看看语法有没有错

再在html下创建一个error

8月8日上课内容 研究nginx组件rewrite,nginx,运维

8月8日上课内容 研究nginx组件rewrite,nginx,运维

systemctl restart nginx

8月8日上课内容 研究nginx组件rewrite,nginx,运维 

只有 IP 为 192.168.233.61 能正常访问,其它地址都是维护页面

systemctl restart nginx.service 

验证一下:

只有允许的才能正常访问

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 其他都是breaking

8月8日上课内容 研究nginx组件rewrite,nginx,运维

 

重点总结:

8月8日上课内容 研究nginx组件rewrite,nginx,运维

location = 优先级最高
location ^- /images/ 正则,以什么为开头location -*\.(pglpng)s 不区分大小写,匹配以。jpg或者png结尾的uri第三优先级location /test/ 通用完整路径
location/通用匹配
匹配到了不再向下匹配。优先级根据精确度,location匹配的是uri
rewrite:
标志位:
last
break
permanent
redirect
location /test/
#现在用户访问/ky30/返回ky30的用户信息
root html
html 创建ky30,
location /test1/文章来源地址https://www.toymoban.com/news/detail-635546.html

到了这里,关于8月8日上课内容 研究nginx组件rewrite的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • nginx rewrite 用法,用rewrite去除URL中的特定参数

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

    2024年02月05日
    浏览(40)
  • Nginx Rewrite详解

    目录 一、Rewrite跳转场景 二、Rewrite跳转实现 三、Rewrite实际场景 1.nginx跳转需求的实现方式: 2.rewrite放在server{},if{},location{}段中 3.对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite命令/语法格式 六、Location分类 1. location 大致可以分为三类: 2.location 常用的匹配规则:

    2024年02月07日
    浏览(37)
  • Nginx Rewrite的应用

    目录 一、Nginx Rewrite 二、Rewrite的功能  1.Rewrite  跳转场景 2.Rewrite  跳转实现 3.Rewrite  实际场景 4.Rewrite  正则表达式 5.Rewrite  命令/语法格式 6.location  分类 7.location  优先级 8.Rewrite和location比较 9.根据以上了解,小案例来操作实现我们在企业跳转案例 三、Rewrite  跳转场景

    2024年02月12日
    浏览(49)
  • 【Nginx】rewrite简单使用

    没有对正式的rewrite进行了解,为了能快速了解它是干嘛怎么用,找了一些有例子的博客进行简单学习了一下;由于每次看的间隔有点大,老忘记,这回专门写个超级快速理解的例子。 PS:下面的解释可能会不太对,大佬们可以分享一下正确说法;如果用法都有错了,请诸位指

    2024年02月15日
    浏览(39)
  • 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日
    浏览(29)
  • 8.Nginx Rewrite

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

    2024年02月08日
    浏览(34)
  • Nginx服务之Rewrite

    目录 一、Rewrite实际场景 1、Nginx跳转需求的实现方式 2、rewrite放在server{},if{}, location{}段中 3、对域名或参数字符串 二、Nginx 正则表达式 三、Rewrite命令 四、Location 分类 1、分类  2、正则匹配的常用表达式 3、location 优先级 4、Nginx在实际网站中至少有三个匹配规则定义 4.1第

    2024年02月14日
    浏览(41)
  • nginx rewrite(重定向)

    目录 一、什么是rewrite 二、rewrite使用场景 三、rewrite配置语法 四、常用的nginx正则表达式 五、nginx 配置文件里 location 项 1、localtion 作用 2、location 可以分为三类 3、location 的常用匹配规则 4、location 的 优先级与匹配规则 5、location 示例说明 六、案例 七、rewrite总结        R

    2024年02月11日
    浏览(37)
  • Nginx重写功能rewrite

    目录 一、Rewrite简单介绍 1、Rewrite的概述 2、Rewrite跳转场景 3、URI、URL、URN 4、Rewrite跳转实现 5、Rewrite实际场景  6、Nginx正则表达式 7、Rewrite执行顺序 二、location简单介绍 1、location的分类 2、location 常用的匹配规则 3、location的优先级 4、location示例说明 5、实际网站使用中,至

    2024年02月08日
    浏览(40)
  • Nginx Rewrite 重写跳转

    rewrite功能: 使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。 比如: 更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。 rewrite只能放在server{},location{},if{}中,并且默

    2024年02月11日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包