五、重定向和nginx正向代理

发布于:2024-12-18 ⋅ 阅读:(78) ⋅ 点赞:(0)

重定向

基本含义

重定向:就是输入的网站之后会跳转到设定的目标网站(如360bug——>京东)

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

www.baidu.com——>www.sin.com

www.baidu.com/test1——>www.sin.com/test2

目的:

1、更换域名

2、特殊情况,比如说页面需要维护,但是我不想中断服务,可以实现url的跳转,访问正常的服务器。

3、防盗链

rewrite跳转

要有ngx_http_rewrite_module模块,它可以支持url重定向

rewrite跳转支持条件判断(if语句,但没有else)

语法配置

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

标志位的类型(location匹配的控制语句):

1、permanent:返回码是301,永久重定向

2、redirect:返回码是302,临时重定向

3、break:跳转时不会改变url。break是按照location的规则进行匹配的,匹配到即终止,不属于          3**开头的重定向范围之内。

4、last:本条规则匹配完毕之后,继续向下匹配新的location规则。last一旦陷入死循环,内部循          环10次就会停止,然后报错500。

  • 注意:break和last没有跳转的返回码,属于匹配location的机制。
  • 301永久重定向:永久性的变更url,搜索引擎的排名和权重会转移到新的url,客户端会保留新的url
  • 302临时重定向:短期的url变更,一般用在维护时,搜索引擎的排名和权重不会转移到新的url。客户端会继续访问原始的url。

如下图所示

  • (.*):正则表达式匹配的内容进行捕获

我们访问 /usr/location/nginx/html/test/index.html 跳转到 /usr/location/nginx/html/xy104/index.html

500报错的原因

1、服务器故障

2、防火墙屏蔽

3、应用的端口没有启用:

  • 配置文件写错了
  • 有其他应用占用了本服务的端口
  • 服务器资源不够,应用无法启动
  • 磁盘空间不足

4、last匹配机制导致陷入死循环,10次之后就会报错500

5、网络原因

实操

基于域名的跳转

实现我们访问www.zw104 跳转到 www.zw105.com

1、首先我们对nginx主配置文件的location进行配置,具体如下

  • 匹配$host的路径,www.zw104.com/(.*)   跳转到  www.zw105.com/$1(  (.*)=$1  )

2、接着对主机系统域名进行配置,之后再重启nginx服务

3、这时候我们访问 www.zw104.com 会发现会自动跳转到 www.zw105.com

基于IP的跳转

实现只有本机192.168.254.14可以访问nginx,其他主机访问统一显示正在维护中

1、配置本机nginx主配置文件,操做和解释如下:

2、在 /nginx/html/ 目录下,创建好 error.html ,并echo  "正在维护中" 进去

3、这时候我们只有用本机(192.168.254.14)在虚拟机网页上访问自己的nginx,才会显示成功,其他人访问一律失败。

基于后缀名的跳转

实现访问www.zw104.com/test1/index.php 会跳转到 www.zw105.com

1、配置主配置文件,如下

2、这样我们访问www.zw104.com/test1/index.php 会跳转到 www.zw105.com

nginx内置变量

$uri:可以获取客户端请求的地址,不包含主机和查询参数

$request_uri:获取客户端的请求地址,包含主机和查询参数

$host:客户端向服务端发送请求的主机名

$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_header   X-Real-IP   $remote_addr

X-Forward-For:传递完整的代理链,只要数据包经过代理,都会被传送nginx,记录所有的代理地址和客户端的真实IP

  • proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for:记录所有经过的代理地址

如下图所示,我们获取变量,查看变量代表的含义

nginx的正向代理

nginx的正向代理是七层代理

nginx的反向代理是四层代理和七层代理

四层代理和七层代理区别

四层:传输层  IP+端口

七层:应用层  http协议

四层代理

  1. 四层代理是基于tcp/ip协议层的代理转发方式,只是基于ip+端口号的形式实现代理。
  2. 四层代理无法获取http请求中的url信息,只是对数据包进行转发。
  3. 四层转发数据包,是由内核进行转发,速度更快。

七层代理

  1. 七层代理是通过http协议进行代理转发的方式,处理http的请求和响应。
  2. 当收到http请求之后,根据代理的方式,把http请求转发到指定的服务器
  3. 七层代理是可以对http请求进行深入的分析和处理的,可以对请求内容做路由,可以做流量控制,可以内容过滤等。
  4. 七层代理是由应用层处理,用户态来处理,速度相对较慢,但是更安全,更可靠

nginx、Haproxy:都能做四层代理和七层代理的

lvs:只能做四层转发

正向代理配置

正向代理都是需要对请求进行处理,属于七层代理。

正向代理是面向客户端的,客户端想要访问web服务器,但是客户端的ip地址禁止访问,通过代理的IP地址访问目标的服务器。

服务端只会知道代理服务器的地址,但是不知道客户端的ip地址。

正向代理的特点:

1、代理的IP地址和访问的服务端对客户端来说是已知的

2、后端服务器不知道客户端的IP地址

固定代理

实现nginx固定代理百度

1、我们在主配置文件http下面添加一行命令

接着在/nginx目录下创建一个目录conf.d,并创建一个配置文件gddl.conf,这样 gddl.conf 也作为nginx的主配置文件的一个server。

2、配置gddl.conf,具体操作和解释如下

解释如下

  • listen 8888:要定义一个空端口
  • server_name localhost:定义的不能和主配置文件一样,除非是localhost

3、配置完之后别忘记检查下语法,再重启nginx服务后,我们发现访问我的nginx,加上端口8888就是访问百度。

自动代理

实现nginx自动代理任意网站

1、根据上面固定代理操作,在conf.d目录下创建一个配置文件zddl.conf,并进行配置和解释如下

设置请求体,是为了清楚告诉我们服务端,省得被bang掉。

解释如下

2、检查配置语法无误并重启nginx后,使用curl  -x进行传参访问nginx,这样是需要设置参数,nginx就可以代理任何网站。

curl -x http://192.168.254.16:8889 http://www.baidu.com


网站公告

今日签到

点亮在社区的每一天
去签到