nginx的重定向(rewrite)
location匹配
location匹配的就是后面的URI
location匹配的分类和优先级*
1、精确匹配 location=/ 对字符串进行完全匹配,必须完全符合,后面内容要写全
2、正则匹配 ^~ 以 xxx为开头
~区分大小写的匹配
~*不区分大小写
!~ :区分大小写取反
!~* 不区分大小写取反
3、一般匹配
location / 字符串
优先级: 精确匹配 > 正则 > 一般 和顺序无关
location=/ > location ^~ > location /
总结:
1.location = 完整路径 (1.jpg 不能是1 或 1. 1.j 要写全)
2.location ^~
3.location ~ 并列 location~*
4.location / 部分起始位置(有字符串)
5.location / (/后面什么都没有)
实际网站中使用的规则
怎么分配选择location匹配
第一
location = / {
root html;
index index.html index.htm
}
网站的首页
第二个必选规则 处理静态请求页面
location ^~ /static/ {
root /web/static/;
index index.html index.htm;
}
匹配静态页面
location ~* \ .(jpg|gif|png|jpeg|css)${
root /web/pictures/;
index index.html index.htm
}
访问图片或指定后缀名
第三规则 一般是通用规则,用来转发.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地址
标志位:
permanent:永久重定向,返回码是301,浏览器地址栏会显示跳转后的url地址
redirect 临时重定向 返回码 302 浏览器地址栏会显示跳转后的url地址
break 永久重定向,返回码301 ,但 匹配到规则后不会再向下匹配其他规则,url也不会变化
last 重定向 但会继续向下匹配其他的location规则
rewrite执行顺序:
1.server模块的rewrite优先级最高
2.匹配location的规则
3.执行选定的location规则
rewrite语法
rewrite + 正则表达式 + 跳转后的内容 + 标志位 ;