nginx的重定向(rewrite)

1、location 匹配

location匹配的就是后面的URL,对访问的路径做访问控制或者代理转发

共有三个匹配:精确匹配、正则匹配、一般配

a、精确匹配

格式:location=/ 对字符串进行完全匹配,必须完全合

c、正则匹配

^~:前缀匹配 以什么为开头,如果匹配成功,则不再匹配其它的正则匹配的location。

~:区分大小写的匹配

~*:不区分大小写

!~:区分大小写的区分

!~*:不匹配大小的取反

c、一般匹配(通用匹配)

location /字符串

2、location 优先级以及原则

优先级:精确>正则>一般

优先级总结:

location= 最高,必须是完整路径

location= 1.jpg 每一位都需要一摸一样否则匹配不到

location= 完整路径 > location ^~ > location~ location ~* >location /部分起始位置 >location /

实际网站中的使用规则:

location= / {

root html;

index index.html index.htm index.php;

}

网站首页

第二个必选的规则:处理静态请求的页面

location^~ /static /{

root/web/sataic/

index index.html index.htm;

}

用来匹配静态页面

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

root /web/pirturs/;

idnex index.html index.tml;

}

访问图片或者指定的后缀名

第三个规则,一般通用规则,用来转发.php .js 为后缀的动态请求到后端服务器(数据库)

location / {

proxy_pass

}

转发后端请求和负载均衡

3、rewrite重定向

rewrite就是把当前访问的页面跳转到其他页面

rewrite工作方式,通过nginx的全局变量或者是自定义变量,结合正则表达式和标志位实现url的重定向,对访问的域名或者域名内的URL路径地址重写。

4、rewrite 和 location区别

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

5、nginx的变量

$url 客户端另外的url地址

$host 请求的主机名

$http_user_agent :客户端请求的浏览器和操作系统

$http_referer:请求头的fefrr的信息模式当前页面来源的url

$remote_addr 客户端的IP地址

$remote_port 客户端的端口

$server_port 服务端的端口号

$server_addr 服务端的ip地址

$request_method 获取客户端请求的方法

$scheme请求的协议,要么是http 要么是https

x_forward_for :用来获取请求头当中客户端的真实ip地址,代理服务器添加,在代理服务器中指示客户端的ip地址

X-Real-IP: 客户端真实的ip地址

6、标志位

flag:(四种)

permanen 永久重定向。返回码是301 浏览器地址会显示跳转后的url地址 (方便搜索引擎可以被搜索到)

redirect 临时重定向,返回码302 浏览器地址会显示跳转后url地址

break 永久重定向 返回码也是301 但是他匹配到规则之后不会在向下匹配其他规则,url 也不会发生变化

last 重定向但是会继续向下匹配其他的location规则

7、rewrite的执行顺序

1、server模块的rewrite优先级最高

2、匹配location的规则

3、执行选定的location规则

8、rewrite的语法

rewrite 正则表达式 跳转后的内容 标志位;

在重定向的过程中使用last方式进行重定向,但是没有结束语,陷入了死循环,nginx会自动循环10次

last最多只能执行10次,超过10次没有结束就会停止,然后保存500

将结束语last改成break避免死循环

9、实验 基于域名进行跳转,老的不用了,但是依然可以访问,统统跳转到新的域名

宿主机 :192.168.10.20 域名www.xy102.com

复制代码
  if ( $host = 'www.xy102.com' ){
         rewrite ^/(.*)$ http://www.zlm.com/$1 permanent;

在/etc/hosts目录下进行本地映射

在虚拟机自带的浏览器对域名<www.xy102.com>进行访问,域名跳转到<www.zlm.com>只域名跳转,内容不变

10、实验:基于ip进行跳转,公司有新业务上线,测试阶段,其他的ip只能显示维护中,只有本机能正常访问

设置一个变量名,变量名rewrite值是true,接下来判断ip是否合法,true进行跳转,如果是false跳转到错误页面

复制代码
   set $rewrite true;
           if ( $remote_addr = "192.168.10.20" ){
        set $rewrite false;
}
        if ( $rewrite = true ){
        rewrite (.+) /error.html;
}
        location = /error.html {
        root html;
        index index.html;
}

error.html的内容

使用宿主机192.168.10.20对192.168.10.20进行访问

使用192.168.10.30对192.168.10.20进行访问

相关推荐
Lust Dusk1 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
轻揉小乔 真新人2 小时前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
Yan_chen6662 小时前
SSH(Secure Shell)安全外壳协议详解
运维·网络协议·ssh
lingran__4 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
各类产品分享4 小时前
电力行业AR智能运维哪个品牌好
运维·ar·ar巡检
贾天佑忆月 迷失的昵5 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud5 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower5 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng11335 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器
兵bing6 小时前
Docker Compose 配置文件归纳总结-千问
运维·docker·容器