NGINX组件(rewrite)

一、location匹配的规则和优先级(*)

URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等

nginx中的URI匹配的是:网址"/"后的路径 如:............/images/a.jpg

location就是用来匹配URI的

匹配方式

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

匹配规则

匹配规则:
= 精确匹配,完全匹配,不能错误一个字,必须要完全匹配
^~ 匹配普通字符,前缀匹配
$~ 结尾匹配
~ 区分大小写的匹配
~* 不区分大小写的匹配
!~ 区分大小写的匹配,并且逻辑取反
!~* 不区分大小写的取反

location匹配的原则:越精准,越匹配;同时优先级越高

总结:匹配的优先级------>越精准,优先级越高

location的优先级

location = :精确匹配

location ^~ :前缀匹配

location ~* : 正则匹配

location /xxx/ : 一般匹配的准确匹配

location / : 一般匹配

注意:一旦匹配成功,后续将不再匹配

工作中的location匹配规则

一、第一个 必选规则

location = / { }

原因:直接匹配根网站。直接通过域名访问首页是网站最常用的,直接使用精确匹配,可以加快处理,一般使用精确匹配处理的都是首页

二、第二个规则

location ^~ /static/ { }

处理静态文件的请求,目录匹配 (static为自定义)

三、

location ~* \.(gif | jpg | png | css)

匹配图片,但注意如果使用rewrite来指定后缀的类型,要在location定义中移除,不然会陷入死循环

四、通用规则

location / {

proxy_pass ------------指定代理、反向代理,转发动态请求,如php.jsp请求 ,发到后端

}

rewrite 重写、重定向

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

default_type text/plain;

表示如果没有在其他地方显示:content_type的头字段,默认响应为text/plain纯文本格式

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

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

text/css :css样式的类型:css

text/javascript:java脚本,.js。前端文件,也可以理解是iava解析的程序文件。

rewrite 执行顺序

1、执行service模块中的rewrite

2、执行location中的匹配

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

注意:如果不停的rewrite,则只会循环执行10次,10次过后进行报错,返回状态码:500

rewrite的语法

rewrite <regex(正则)> <replacement> flag(标志位)

过程:

rewrite:开始重定向

regex:正则匹配的规则

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

flag:标志位

标志位分为四种:

permanent :永久重定向、返回码301 ------ 永久性的变更URL,搜索引擎会转移他的权重,以及排名,到新的URL

redirect :临时重定向,返回码:302 ------ 用于短期变更(网站维护、升级、更新),搜索,是不会转移权重和排名

返回码:304 指的是获取的是本地缓存

break :重定向,但是不会改变原始的URL,内容会根据系统处理而显示重定向后的内容,并且只会请求一次,即刻跳出当前匹配,立即终止

last :表示本条匹配完成后,继续向下匹配,只要有last就会继续进行匹配,配置时需要注意,防止死循环

配置基于域名的跳转

首先进入nginx的配置文件 进行修改

复制代码
vim /usr/local/nginx/conf/nginx.conf

 server {
        listen       80;
        server_name  www.zheng.cc;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            if ($host = 'www.zheng.cc') {
            rewrite ^/(.*)$ http://www.bai.com/$1 permanent;
            }
            root   html;
            index  index.html index.htm;
        }
}

在本地hosts文件中写入配置的地址

复制代码
echo "20.0.0.40 www.zheng.cc www.bai.com" >> /etc/hosts

重启nginx服务

复制代码
systemctl restart nginx

测试:输入配置的地址 www.zheng.cc 后回车

会跳转至配置的www.bai.com

相关推荐
乘云数字DATABUFF9 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
ping某7 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql