nginx的重定向(rewrite)

location 匹配

location 匹配的就是后面的URI

/wordpress

192.168.233.21/wordpress

location匹配的分类和优先级*

1、精确匹配 location= / 对字符串进行完全匹配,必须完全符合

2、正则匹配

^-前缀匹配,以什么开头

-区分大小写的匹配

-*不区分大小写

3、一般匹配

location /字符串

精确匹配的优先级最高>正则>一般

优先级总结:

location = 完整路径=1.jpg > location ^- >location - location-* > location /部分起始位置 > location /

实际网站中的使用规则:

location =/ {

root html;

index index.html index.html index.php

}

网站的首页

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

locaiton ^- /static/ {

root/web/static/;

index index.html index.htm;

}

用来匹配静态页面

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

root /web/picturs/;

index index.html index.html;

}

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

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

location /{

proxy_pass

}

转发后端请求和负载均衡

rewrite重定向:

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

rewrite的工作方式:通过nginx的全局变量或者是自定义变量,结合正则表达式和标志位实现url的重定向

nginx的变量

$uri 客户端请求的uri地址

$host 请求的主机名

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

$http_referer 请求头的referer信息,表示当前页面来源的url

$remote_addr 客户端的ip地址

$remote_port 客户端的端口号

$server addr 服务端的ip地址

$server_port 服务端的端口号

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

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

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

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

nginx.conf

proxy_set_header X-Real-IP $ remote_addr加上这一字段,客户端的真实ip地址就会传递给后端服务器。

标志位:

flag

permanent:永久重定向,返回码是301,浏览器地址栏会显示跳转后的URL地址

redirect:临时重定向,返回码是302,浏览器地址栏会显示跳转后的URL地址

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

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

rewrite的执行顺序:

1、sever模块rewrite优先级最高

2、匹配location的规则

3、执行选定的location规则

rewrite的语法:

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

rewrite or internal redirection cycle while processing?

在重定向的过程中,使用了last方式进行重定向,但是,没有结束语,陷入了死循环,nginx会自动循环10次,超过10次没有结束,就会停止,然后报错500

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