一、重定向
1.定义
输入网站之后就会跳转到设定的目标网址
例如:www.hello.com/test1---->www.happy.com/test2
2.意义
-
更换域名
-
特殊情况
比如说页面需要维护,但是不想中断服务,可以实现uri的跳转,访问正常的服务器
-
防盗链
3.重定向的语法
必须有nginx_http_rewrite模块,支持url的重定向
支持条件判断:if语句,没有else
rewrite跳转
rewrite 正则表达式 跳转后的内容 标志位
实验:访问192.168.206.60/test实际跳转到192.168.206.60/happy
标志位的类型
-
permanent
永久重定向,返回码301
-
redirect
临时重定向,返回码302
301和302的区别
301永久重定向:永久性的变更url,搜索引擎的排名和权重会转移到新的url,客户端会保留新的url
302临时重定向,短期的url变更,一般用在维护时,搜索引擎的排名和权重不会转移到新的url,客户端会继续访问原始的url
-
break
跳转时不会改变url
break是按照location的规则进行匹配的,匹配到即终止,不属于3**开头的重定向范围之内。
-
last
本条规则匹配完毕之后,继续向下匹配新的location规则。
last一旦陷入死循环,内部循环10次就会停止,然后报错500。
braek和last没有跳转的返回码,属于匹配location的机制。
*出现500的情况的原因
(1)服务器故障
(2)防火墙屏蔽
(3)应用的端口没有启动
-
配置文件写错了
-
有其他应用占用了本服务的端口
-
服务器资源不够,应用无法启动
-
磁盘空间不足
(4)last匹配机制导致陷入死循环,10次之后就会报错500
(5)检查网络
4.实验
(1)基于域名的跳转
www.zhangsan.com -----> www.lisi.com
(2)基于ip的跳转
192.168.206.60这个服务器的网页正在维护,只有本机可以访问,其他主机访问统一显示正在维护中
(3)基于后缀名的跳转
根据www.zhangsan.com/test1/下的.php文件跳转到www.lisi.com
二、nginx的正向代理
1.nignx的内置变量
变量名 | 作用 |
$uri | 可以获取客户端请求的地址,不包含主机和查询的参数 |
$request _uri | 获取客户端的请求地址,包含主机和查询参数 |
$host | 请求的主机名 客户端---发送请求的uri地址 |
$http_user_agent | 获取客户端请求的浏览器和操作系统 |
$remote_addr | 获取客户端的ip地址(可以隐藏) |
$remote_port | 客户端请求的端口 |
$server_addr | 可以查询服务端的ip地址 |
$server_port | 服务端的端口号 |
$request_method | 获取客户端的请求方式,get post |
$scheme | 获取请求的协议 http 或者 https |
$request_filename | 获取客户端请求的文件名 |
$document_root | 获取当前请求的根目录 |
*两个头部内置变量
nginx在配置location匹配时,会使用两个获取头部的内置变量。
-
X-Real-IP
直接向服务端发送客户端访问的真实ip地址
语法:
proxy_set_head X-Real-IP $remote_addr
-
X-Forwarded-For
传递完整的代理链,只要数据包经过代理,都会被传送nginx,记录所有的代理地址和客户端的真实ip
语法:
proxy_set_head X-Forwarded-For $proxy_add_x_forwarded_for
#记录所有经过的代理地址
2.nginx的正向代理
(1)四层代理
四层代理 传输层 ip+端口
四层代理是基于tcp/ip协议层的代理转发方式,只是基于ip+端口号的形式实现代理,四层代理无法获取http请求中的url信息,只是对数据包进行转发。
四层转发数据包,是由内核进行转发,速度更快 内核态(开发)
(2)七层代理
七层代理 应用层 http协议
层代理代理是通过http协议进行代理转发的方式,处理http的请求和响应,当收到http请求之后,根据代理的方式,把http请求转发到指定的服务器,可以对http请求进行深入的分析和处理。
可以对请求内容做路由,流量控制,内容过滤等。
七层代理是由应用层处理,用户态来处理,速度相对较慢
同时能做四层代理和七层代理的:nginx Haproxy
lvs 只能做四层转发
(3)正向代理及其特点
正向代理都是需要对请求进行处理,属于七层代理。
正向代理是面向客户端的,客户端想要访问web服务器,但是客户端的ip地址禁止访问,通过代理的ip地址访问目标的服务器,服务端只会知道代理服务器的地址,但是不知道客户端的ip地址。
正向代理的特点:
- 代理的ip地址和访问的服务端对客户端来说是已知的
- 后端服务器不知道客户端的ip地址