六月学习之Haproxy高级功能(IP地址透传)
  eHipUjOuzYYH 2023年11月02日 31 0

6、Haproxy高级功能

6.5、IP地址透传

web服务器中记录客户端的真实IP地址,主要用于访问统计、安全防护、行为分析、区域排行等场景

6.5.1、七层负载地址透传

Haproxy工作于反向代理模式,其发往服务器的请求中的客户端IP均为Haproxy主机的地址而非真正客户端的地址,这会使得服务器的日志信息记录不了真正的请求来源,X-Forwarded-For首部则可用于解决此问题
Haproxy可以向每个发往服务器的请求上添加此首部,并以客户端IP为其value
option forwardfor语法:option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
<network>:可选参数,当指定时,源地址为匹配至此网络中的请求都禁用此功能
<name>:可选参数,可自定义一个首部,如x-client来代替X-Forwarded-For
if-none:仅在此首部不存在时才将其添加至请求报文中

option forwardfor示例:
vim /etc/haproxy/haproxy.cfg
defaults
    option forwardfor #此为默认值,首部字段默认为:X-Forwarded-For
frontend main
    bind *:80
    mode http
    default_backend app
backend app
    balance roundrobin
    server web1 172.16.1.7:80 check
    server web2 172.16.1.8:80 check

#检查后端nginx日志
172.16.1.5 - - [25/Dec/2022:11:18:36] "GET / HTTP/1.1" 200 18 "-" "curl/7.29.0" "10.0.0.1"

6.5.2、四层负载地址透传

1、配置Haproxy基于TCP协议访问
vim /etc/haproxy/haproxy.cfg
frontend main
    bind *:80
    mode tcp			# tcp
    default_backend app

backend app
    balance roundrobin
    server web1 172.16.1.7:80 check send-proxy  #send-proxy: HA将proxy protocol协议发送到后端节点

2、配置后端web节点
#Nginx配置:变量$proxy_protocol_addr记录透传过来的客户端IP
http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" "$proxy_protocol_addr"';
    server {
        listen 80 proxy_protocol; #启用此项,将无法直接访问此网站,只能通过四层代理访问
        server_name proxy.qingchen.com;
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }

}

3、检查后端节点日志
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

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

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   27   0   0 nginx客户端服务端
  jnZtF7Co41Wg   2023年12月09日   26   0   0 客户端服务端数据
  Yoru5qB4TSKM   2023年12月10日   36   0   0 服务器重启IP
  jnZtF7Co41Wg   2023年12月10日   20   0   0 nginx客户端服务端NFS
  aYmIB3fiUdn9   2023年12月08日   49   0   0 客户端IPNATlvs