一. haproxy实现request请求重定向

关于haproxy 请求重定向主要会用到:1. redirect ;2. redir 这两类重定向配置语法。

1. redirect重定向的用法:(redirect通常配置在haproxy acl部分)

redirect一般有两个指令来执行HTTP重定向:

http-requets redirect     (此种方式支持日志变量格式)、

redirect                          (此种方式只依赖于静态字符串)

这两个指令的语法是相同的,即redirect现在被认为是传统和配置应该移动到http-request redirect形式。

一个其它的主要区别是:http-request redirect使用日志可变格式而redirect语句只依赖于静态字符串。

redirect有三种重定向方式:

(1)位置重定向

使用语法如下:

redirect location <loc> [code <code>] <option> [{if | unless} <condition>]

使用位置重定向,例如下面所示指令可以将用户重定向到所提供的精确位置, 该位置可以是第三方URL链接,也可以是本地web服务的另一个访问路径

1. http-request redirect location <loc> [code <code>] [<option>] [<condition>]

2. redirect location <loc> [code <code>] [<option>] [<condition>]

相关指令参数如下:

* <loc> :一个日志格式变量 (或简单的字符串redirect语句)描述了新位置;

* code <code>(可选):HTTP重定向的状态代码来执行。 此选项下的允许的状态码如下所示:

状态码 含义
301 永久移动,转发
302 临时移动,不应该由客户端进行缓存。 这是默认值,如果没有code配置。
303 像302,但是浏览器必须使用GET获取新位置
307 像302,但浏览器必须重新使用相同的方法之一,从原来的请求
308 像301,但浏览器必须重新使用相同的方法比从原始请求所述一个

* <option>(可选): 可以是以下任何或组合的声明:

1. set-cookie NAME[=value] :一个Set-Cookie头部被添加到重定向。该cookie被命名为名称,可以有一个可选的值值。

2.  clear-cookie NAME[=]一个特殊的Set-Cookie头被添加到重定向。该Cookie名为名称和最大年龄的cookie参数设置为0,目的是为了指示浏览器删除cookie。

注意:在于浏览器中,这是两个不同的Cookie:NAME和NAME = 以上根据您的流量模式,必须将两个语句适应。

* if | unless :用于条件判断

* <condition> (可选):用于匹配acl,一般为acl的名称

(2)前缀重定向

使用语法如下:

redirect prefix <loc> [code <code>] <option> [{if | unless} <condition>]

使用前缀重定向,将用户重定向到由concateneting建立了一个网址<pfx>和完整的原始URI路径:

1. http-request redirect prefix <pfx> [code <code>] [<option>] [<condition>]

2. redirect prefix <pfx> [code <code>] [<option>] [<condition>]

相关指令参数如下:

<pfx>一个日志格式变量 (或简单的字符串redirect语句)描述了新的位置前缀。

* code <code>(可选):HTTP重定向的状态代码来执行。 此选项下的允许的状态码如下所示:

状态码 含义
301 永久移动,转发
302 临时移动,不应该由客户端进行缓存。 这是默认值,如果没有code配置。
303 像302,但是浏览器必须使用GET获取新位置
307 像302,但浏览器必须重新使用相同的方法之一,从原来的请求
308 像301,但浏览器必须重新使用相同的方法比从原始请求所述一个

* <option>(可选): 可以是以下任何或组合的声明:

drop-query :在执行串联时从原来的URL删除查询字符串

append-slash :配合使用drop-query ,在该URL的末尾添加一个“/”字符

set-cookie NAME[=value] :一个Set-Cookie头部被添加到重定向。该cookie被命名为名称,可以有一个可选的值值。

clear-cookie NAME[=] :一个特殊的Set-Cookie头被添加到重定向。该Cookie名为名称和最大年龄的cookie参数设置为0,目的是为了指示浏览器删除cookie。

* if | unless :用于条件判断

* <condition> (可选):用于匹配acl,一般为acl的名称

(3)协议(计划)重定向(比如将http重定向到https)

使用语法如下:

redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]

使用协议重定向,例如下面所示指令可以将用户重定向到所提供的新的http协议url链接, 一般用于非安全链接跳转到安全链接,比如http跳转到https上

1. http-request redirect scheme <schloc> [code <code>] [<option>] [<condition>]

2. redirect scheme <sch> [code <code>] [<option>] [<condition>]

相关指令参数如下:

* <loc> :一个日志格式变量 (或简单的字符串redirect语句)描述了新位置;

* code <code>(可选):HTTP重定向的状态代码来执行。 此选项下的允许的状态码如下所示:

状态码 含义
301 永久移动,转发
302 临时移动,不应该由客户端进行缓存。 这是默认值,如果没有code配置。
303 像302,但是浏览器必须使用GET获取新位置
307 像302,但浏览器必须重新使用相同的方法之一,从原来的请求
308 像301,但浏览器必须重新使用相同的方法比从原始请求所述一个

* <option>(可选): 可以是以下任何或组合的声明:

1. set-cookie NAME[=value] :一个Set-Cookie头部被添加到重定向。该cookie被命名为名称,可以有一个可选的值值。

2.  clear-cookie NAME[=]一个特殊的Set-Cookie头被添加到重定向。该Cookie名为名称和最大年龄的cookie参数设置为0,目的是为了指示浏览器删除cookie。

注意:在于浏览器中,这是两个不同的Cookie:NAME和NAME = 以上根据您的流量模式,必须将两个语句适应。

* if | unless :用于条件判断

* <condition> (可选):用于匹配acl,一般为acl的名称

如下为一个简单的实例:

acl http      ssl_fc,nothttp-request redirect scheme https if http

总结:

redirect三种重定向可以混合使用,比较常用的有redirect prefix 和 redirect location这两种方式,从某种理解上可以交差使用;

2. redir重定向的用法:(redir通常配置在haproxy backend部分)

使用redir 会将发往backend的站点服务请求均以302状态响应发给需要重定向的server服务或站点,此时haproxy不需要向后端web server提交请求;需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以避免造成循环,例如:

frontend  main *:80    default_backend             appbackend app    balance     roundrobin    server node1 127.0.0.1:81 check weight 3 redir http://www.bluemobi.cn

上面配置含义:所有发往localhost:81的请求做重定向,重定向到www.bluemobi.cn因此可以实现单台服务器的重定向

又例如,如果我们要讲访问的站点重定向到baidu.com

frontend  main *:80    default_backend             appbackend app    balance     roundrobin    server node1 127.0.0.1:81 check weight 3 redir http://www.baidu.cn

注意:redir只做跳转,如客户端输入:http://ip ,将会跳转到指定的页面上,此时客户端的页面的页面也会跳转到指定的页面上,之后所有的请求都会递交到该站点(前提该站点可以与客户端通讯),而不再发往haproxy代理站点,haproxy也不需要往后端web server提交客户端发过来的请求。

二. haproxy实现error重定向

格式为: errorfile  错误代码code  错误代码响应提示页路径

* errorfile 即根据客户端页面错误code状态将指定的错误状态页面提示给客户端,比如友情提示页面,一般如下:

errorfile 403 /etc/haproxy/errorfiles/403.httperrorfile 500 /etc/haproxy/errorfiles/500.httperrorfile 502 /etc/haproxy/errorfiles/502.httperrorfile 503 /etc/haproxy/errorfiles/503.httperrorfile 504 /etc/haproxy/errorfiles/504.http

例如:如果想访问403页面重定向到其他页面的话,则参考以下配置

frontend web_server   bind *:80   default_backend webserver   acl badguy src 10.0.10.1   block if badguy   errorloc 403 http://baidu.com/     #定义错误页面重定向

总结: 错误重定向可以更加友好地提示客户端错误状态,比如做定制页面化跳转,以及网站维护升级等等,当出现错误时,可以及时跳转到预定好错误提示页面上。

转自http://blog.51cto.com/blief/1752669

转载于:https://www.cnblogs.com/cnyw/p/10113913.html

关于haproxy的重定向相关推荐

  1. linux下实现 日志类重定向c 代码,log4cplus使用(三)-日志重定向

    本文讲述的是log4cplus日志输出到qt widget,封装了serverSocket.     log4cplus支持用户自定义输出设备,只需要继承自Appender,或者Appender子类, ...

  2. HAproxy指南之haproxy配置详解2(理论篇)

    上一小节的从haproxy的配置文件我们知道haproxy相关参数基本介绍,但是在实际生产环境中,往往需要根据相关规则做请求匹配跳转,这时就需要用到Frontend:Backend这两个配置段,再结合 ...

  3. Linux自学笔记——haproxy

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠地一套解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  4. haproxy实现高可用及负载均衡

    Haproxy简介:          Haproxy是一个使用c语言编写的自由开发源代码软件,它提供高可用性.负载均衡.以及基于http和tcp的应用程序代理.Haproxy特别使用于那些负载特别大 ...

  5. LVS Nginx HAProxy 优缺点

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

  6. 用 HAProxy 实现网络流量的负载平衡

    在这篇文章中,我将通过设置一个非常基本的 HAProxy 环境,使用 HTTPS 来监听安全端口 443,并利用几个后端 Web 服务器.它甚至会将所有进入预定义 URL(如 /api/)的流量发送到 ...

  7. 七层负载均衡--Haproxy

    七层负载均衡--Haproxy 1 Haproxy的定义 2 七层负载均衡的概念 3 四层和七层负载均衡的对比 4 Haproxy的安装及部署 4.1 Haproxy实现负载均衡 4.2 建立监控 4 ...

  8. HAproxy七层负载均衡——访问控制、动静分离、读写分离实现过程详解

    实验环境 主机名 IP 服务 虚拟机server1 172.25.6.1 haproxy,httpd,服务端 虚拟机server2 172.25.6.2 httpd,php,客户端 虚拟机server ...

  9. HAProxy入门及常用配置模拟测试

    HAProxy简介      HAProxy是一个使用C语言编写的,提供负载均衡,以及基于TCP(伪四层)和HTTP(七层)的应用程序代理.   HAProxy特别适用于那些负载大的web站点,这些站 ...

最新文章

  1. POJ3690:Constellations——题解
  2. 《强化学习周刊》第30期:Deep Mind开展人机交互的新试点研究、MIT提出神经进化优化框架...
  3. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )
  4. asp.net中上传文件实例
  5. SQL 语句(原生)
  6. Tomato多拨脚本
  7. linux卸载alien,Ubuntu/Debian下的安装包装换工具—alien
  8. 【数据结构和算法笔记】数组(数组的储存方式和特殊矩阵的压缩储存)
  9. 树莓派交叉编译USB转网卡驱动_incomplete
  10. 神经网络ANN——SPSS实现
  11. 备战2022软考网络管理员(1)介绍与开篇
  12. Java 实现 图片OCR文字识别
  13. 【NOIP模拟】项链
  14. LTE上报的CQI、PMI、RI
  15. sklearn中make_blobs模块使用
  16. Typora编辑的.md文档突然消失或未保存,恢复方式
  17. BreederDAO 直播AMA 1:与创始人会面回顾
  18. 生物统计学(biostatistics)学习笔记(二)
  19. windows服务器安装Bonobo Git Server
  20. 腾讯云:聚焦“双十一”背后 不容忽视的电商风控与安全

热门文章

  1. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄
  2. 深度学习——05、深度学习框架Caffe
  3. 【Linux】一步一步学Linux——zip命令(67)
  4. 【Ubuntu】 Ubuntu16.04搭建Samba服务
  5. java 初始化log4j_java – log4j:WARN请正确初始化log4j系统
  6. 每天一道LeetCode-----在给定数组中找到一个子数组,使得这个子数组的元素乘积最大
  7. linux网络编程-----几种服务器模型及io多路复用函数
  8. unc0ver 发布新版本支持 iOS 13.3 越狱
  9. 留个HelpAssistant用户后门,呵呵。
  10. go 使用sarama写入kafka数据时间戳问题