六月学习之Haproxy高级功能(自定义HTTP报文)
  eHipUjOuzYYH 2023年11月02日 36 0

6、Haproxy高级功能

6.8、自定义HTTP报文

6.8.1、reqadd

reqadd <string> [{if | unless} <crond>]在请求报文中添加指定首部
实现原理:client-->haproxy-->reqadd(添加header)-->web

1、在frontend中使用reqadd,将发往后端集群的请求中添加一个header
cat /etc/haproxy/haproxy.cfg
frontend web
    bind *:88
    mode http
    reqadd X-via:\ Haproxy-Node1
    use_backend webcluster

systemctl reload haproxy

2、修改后端nginx.conf中logformat,添加"$http_x_via"
vim /etc/nginx/nginx.conf
http {
    ...
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" "$http_x_via"';
    ...
}

3、观察nginx日志
172.16.1.5 - - [25/Dec/2022:11:18:36] "GET / HTTP/1.1" 200 18 "-" "curl/7.29.0" "Haproxy-Node1"

6.8.2、rspadd

rspadd在返回给客户端响应报文中添加指定首部
实现原理:web-->haproxy-->rsqadd(添加header)-->client

1、在frontend中使用rsqadd,通过在响应Header中添加字段,告诉客户端资源经过了哪个代理服务
cat /etc/haproxy/haproxy.cfg
frontend web
    bind *:88
    mode http
    rsqadd via:\ Haproxy-1.18
    use_backend webcluster

systemctl reload haproxy

2、客户端访问测试,然后检查响应Header

六月学习之Haproxy高级功能(自定义HTTP报文)_客户端

6.8.3、rspdel

删除返回给客户端的Header字段
frontend web
    bind *:80
    mode http
    default_backend webservers
    
    # 自定义添加Header给后端的Nginx节点
    http-request add-header X-via Haproxy-Node1
    
    # 自定义添加Header给CLient返回   在浏览器端查看
    http-response add-header Res-Server Haproxy2.2-lb
    
    # 删除返回给客户端的Header字段
    http-response del-header server
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   29   0   0 nginx客户端服务端
  jnZtF7Co41Wg   2023年12月09日   27   0   0 客户端服务端数据
  stLBpDewCLT1   2023年12月08日   28   0   0 nginx
  jnZtF7Co41Wg   2023年12月10日   22   0   0 nginx客户端服务端NFS
  eHipUjOuzYYH   2023年12月06日   22   0   0 nginx加载IPV6
  aYmIB3fiUdn9   2023年12月08日   50   0   0 客户端IPNATlvs