前文我们聊了下haproxy的修改报文首部的配置、压缩功能以及haproxy基于http协议自定义健康状态检测机制;回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12789175.html;今天这篇博客主要来说一下haproxy的错误页面定义,日志相关配置;

  首先来说说错误页面的配置吧;haproxy同nginx是一样可自定义错误页面;在nginx里我们用error_page 指令来指定对应错误状态码加location,根据错误状态码指定的location来指定对应错误状态码的状态页面文件;haproxy自定义错误页面的思想类似,不同的是nginx作为web服务器可以自定义404错误页面,而haproxy通常作为代理服务器,对于404错误页面通常不会由haproxy自己指定,因为haproxy作为代理服务器对于后端server的资源是否能够找到,它不知道;即便我们在配置中指定了404错误对应的响应页面,在haproxy重启后是不会生效的;haproxy指定错误页面的方式两种,第一种是指定本地文件系统文件作为对应错误状态码的错误页;第二种是指定对应错误状态码跳转的URL;

  errorfile <code> <file>:指定对应错误状态码对应文件系统上的文件作为该状态码响应的页面

  示例:自定义错误403的错误页面

  提示:为了能够模仿出403错误,上面使用了acl来拒绝源地址为192.168.0.232的访问;后面我们会说acl的用法;上图红框中的内容就是表示对于错误403响应页面上/etc/haproxy/error403.html;

  测试:在192.168.0.232主机上用浏览器访问haproxy对外提供服务端接口,看看是否响应我们自定义的页面?

  提示:从上面的测试结果看,haproxy是能够把我们指定错误状态码对应文件内容响应给我们;这里挺奇怪的在消息头里只看得到请求报文,没有响应报文;

  示例:指定403错误页面跳转至nginx.org/aaa.html

  提示:红框中的配置就表示对于403错误就跳转到指定http://nginx.org/aaa.html

  测试:在232主机上访问192.168.0.22看看是否跳转到nginx.org/aaa.html?

  提示:errorloc和errorloc302都是同样的效果,都是以临时重定向到指定的url上;这里还需要注意一点,这两种方式都是跳转前请求的方法是什么,跳转对应url也是同样的方法;这样一来对于其他非GET方法请求出现403错误码的时候,对应的错误页就无法正常处理(通常只允许GET方法去请求别的URL);比如跳转前用PUT方法,出现错误403后,按照上面的配置,对应指定的错误页的url也会用PUT方法去请求;为了解决这样的问题,我们这里需要用到errorloc303来指定;该指令的意思是返回303响应码;如果请求前非GET方法,而出现对应错误后,用GET方法去请求对应错误状态码指定的URL;

  示例:非GET方法错误页面重定向到其他URL上

  提示:以上配置就表示如果我们用非GET方法请求某资源,出现403错误后,返回303状态码;303表示请求重定向页面的方法要总是使用GET方法;

  测试:先使用errorloc302指定url跳转,然后在浏览器上跳转前使用PUT方法请求,看看跳转后到指定URL看看使用的什么方法?

  提示:可以看到当我们用PUT方法请求192.168.0.22时,跳转到指定的URL也是用的PUT方法;

  测试:用errorloc303指定跳转url,然后用PUT方法请求192.168.0.22看看跳转URL使用什么方法?

  提示:可以看到用errorloc303指定错误url后,跳转指定URL不是跳转前的PUT方法请求,而是GET;

  以上就是haproxy关于错误页面的定义的配置,更多说明请参考官方文档http://cbonte.github.io/haproxy-dconv/;说了haproxy的错误页面配置后,接下来在来了解下haproxy的日志;

  log:启用事件和流量的每个实例日志记录。

  no log:关闭日志记录;

  log global:调用全局配置段中日志的定义;

  log<address> [len <length>] <facility> [<level> [<minlevel>]]:定义一个用于接收haproxy日志的rsyslog服务器地址,facility;默认是发往本机的rsyslog服务器上的local2上;有关rsyslog的相关说明请参考https://www.cnblogs.com/qiuhom-1874/p/12091118.html

  log-format <string>:设定日志格式;日志格式的设定变量表请参照下表

  +---+------+-----------------------------------------------+-------------+
| R | var | field name (8.2.2 and 8.2.3 for description) | type |
+---+------+-----------------------------------------------+-------------+
| | %o | special variable, apply flags on all next var | |
+---+------+-----------------------------------------------+-------------+
| | %B | bytes_read (from server to client) | numeric |
| H | %CC | captured_request_cookie | string |
| H | %CS | captured_response_cookie | string |
| | %H | hostname | string |
| | %ID | unique-id | string |
| | %ST | status_code | numeric |
| | %T | gmt_date_time | date |
| | %Tc | Tc | numeric |
| | %Tl | local_date_time | date |
| H | %Tq | Tq | numeric |
| H | %Tr | Tr | numeric |
| | %Ts | timestamp | numeric |
| | %Tt | Tt | numeric |
| | %Tw | Tw | numeric |
| | %U | bytes_uploaded (from client to server) | numeric |
| | %ac | actconn | numeric |
| | %b | backend_name | string |
| | %bc | beconn (backend concurrent connections) | numeric |
| | %bi | backend_source_ip (connecting address) | IP |
| | %bp | backend_source_port (connecting address) | numeric |
| | %bq | backend_queue | numeric |
| | %ci | client_ip (accepted address) | IP |
| | %cp | client_port (accepted address) | numeric |
| | %f | frontend_name | string |
| | %fc | feconn (frontend concurrent connections) | numeric |
| | %fi | frontend_ip (accepting address) | IP |
| | %fp | frontend_port (accepting address) | numeric |
| | %ft | frontend_name_transport ('~' suffix for SSL) | string |
| | %hr | captured_request_headers default style | string |
| | %hrl | captured_request_headers CLF style | string list |
| | %hs | captured_response_headers default style | string |
| | %hsl | captured_response_headers CLF style | string list |
| | %ms | accept date milliseconds (left-padded with 0) | numeric |
| | %pid | PID | numeric |
| H | %r | http_request | string |
| | %rc | retries | numeric |
| | %rt | request_counter (HTTP req or TCP session) | numeric |
| | %s | server_name | string |
| | %sc | srv_conn (server concurrent connections) | numeric |
| | %si | server_IP (target address) | IP |
| | %sp | server_port (target address) | numeric |
| | %sq | srv_queue | numeric |
| S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
| S | %sslv| ssl_version (ex: TLSv1) | string |
| | %t | date_time (with millisecond resolution) | date |
| | %ts | termination_state | string |
| H | %tsc | termination_state with cookie status | string |
+---+------+-----------------------------------------------+-------------+

  capture cookie <name> len <length>:捕获并记录请求报文和响应报文中的cookie信息

  capture request header <name> len <length>:捕获并记录指定请求标头的最后一次出现

  capture response header <name> len <length>:捕获并记录指定响应标头的最后一次出现

  结合上面的内容,我们就可以自定义访问日志了;通常我们通过capture去捕获对应首部的信息,然后通过上面的变量定义成日志格式

  示例:

  测试:用浏览器访问对应haproxy的前端,看看日志格式

  提示:可以看到我们访问对应haproxy的前端,日志就和默认的日志不一样了;日志格式中的变来可参照上边的表去找对应表示什么;

负载均衡服务之HAProxy基础配置(五)的更多相关文章

  1. 负载均衡服务之HAProxy基础配置(二)

    前文我们聊了下haproxy的global配置段中的常用参数的说明以及使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12763245.html:今天我们来 ...

  2. 负载均衡服务之HAProxy基础配置(一)

    前文我们聊了下haproxy的基础安装,以及怎样去代理后端主机的配置:当然没有很详细的去说配置文件中各指令的意思:有关haproxy的安装和代理后端server可以参考本人博客https://www. ...

  3. 负载均衡服务之HAProxy基础配置(三)

    前文我们聊到了haproxy的代理配置段中比较常用的配置指令的用法以及说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12770930.html:今天我们来 ...

  4. 负载均衡服务之HAProxy基础配置(四)

    前文我们聊了haproxy的状态页配置,状态页中显示各参数的含义,以及基于cookie做会话保持的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12776 ...

  5. 负载均衡服务之HAProxy基础入门

    首先我们来了解下haproxy是干嘛的?haproxy是一个法国人名叫Willy Tarreau开发的一个开源软件:这款软件主要用于解决客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡 ...

  6. 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制

    前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...

  7. HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

    一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...

  8. 负载均衡服务之HAProxy访问控制ACL

    前文我们聊到了haproxy的错误页的配置,自定义日志的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12797913.html:今天我们主要来看看hap ...

  9. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

随机推荐

  1. 深入理解Java AIO(二)—— AIO源码解析

    深入理解Java AIO(二)—— AIO源码解析 这篇只是个占位符,占个位置,之后再详细写(这个之后可能是永远) 所以这里只简单说一下我看了个大概的实现原理,具体的等我之后更新(可能不会更新了) 当 ...

  2. 剑指offer刷题总结

    ★ 二维数组的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...

  3. Ubuntu系统下命令行查看自己已安装的桌面环境问题

    原因:有时我们进行远程连接时需要知道我们的Ubuntu系统已安装的桌面环境,这时我们可以使用[dpkg]命令. [dpkg]:dpkg命令是Debian Linux系统用来安装.创建和管理软件包的实用 ...

  4. opentsdb探索之路——部分设计与实现

    opentsdb 概览(overview) opentsdb 存储细节(Writing) rowkey的设计 rowkey的具体实现 压缩(compaction) 追加模式(appends) open ...

  5. 1023 Have Fun with Numbers (20 分)

    1023 Have Fun with Numbers (20 分)   Notice that the number 123456789 is a 9-digit number consisting ...

  6. 1019 General Palindromic Number (20 分)

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  7. Mysql数据库卸载

    Mysql数据库卸载的操作流程(Windows10): 1.停止mysql的所有服务 方法一:此电脑——管理——服务中查找到所有Mysql的服务,并停止. 方法二:cmd——net stop mysq ...

  8. (js描述的)数据结构[哈希表1.3](10)

    1.哈希表的完善 1.容量质数(limit):需要恒为质数,来确保元素的均匀分布. 1)普通算法: 判断一个数是否为质数 function isPrime(num) { for (var i = 2; ...

  9. html的嵌套规则

    html元素分为块状元素和内联元素,块状元素作为其他元素的容器. 块状元素可以嵌套其他块状元素 块状元素可以嵌套内联元素 内联元素不能嵌套块状元素 p内不能嵌套块状元素 有几个特殊块状元素只能包含内联 ...

  10. Java第二十九天,文件及目录的管理,File类

    一.基础知识点 1.路径分隔符 (1)什么是路径分隔符? 这个多被应用在环境变量设置当中,例如当我设置Path环境变量时,多个环境变量的路径要用 ':'(Windows系统用封号分隔)或 ':'(Li ...