Haproxy转发真实IP给后端WEB服务器


环境:



[root@node154 logs]# haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>


[root@node154 logs]# uname -a
Linux node154 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@node154 logs]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)


拓扑图: 


client                    ------>                      Haproxy                            -------> LNAP


192.168.67.68                                 192.168.67.154                                192.168.67.153






1.在haproxy.cfg中加入下面参数。


vim /etc/haproxy/haproxy.conf


 listen  frontend_86


        bind 0.0.0.0:86
        mode http   #需要在HTTP模式下才可以,TCP模式下不行
        balance source
        option forwardfor    #如果后端服务器需要获得客户端真实ip需要配置的参数,必须要放在listen模块下 
        capture request              header  Host len 20
        capture request              header  Referer  len 60
        server srv152 192.168.67.152:86 weight 1 maxconn 10000 check inter 10s
        server srv153 192.168.67.153:86 weight 1 maxconn 10000 check inter 10s
 


2.如果是apache,则加入下面参数(即修改)


LogFormat  “\”%{X-Forwarded-For}i\”%l %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined 主要是“\”%{X-Forwarded-For}i\ 这个参数可以记录IP


这里我们可以写成这样方便切割日志 LogFormat  “%{X-Forwarded-For}i %l %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined 注意空格之类的,可以直接复制






3.如果是后端web是nginx则加入下面参数


set_real_ip_from ip;(这个ip填写的是proxy的ip)   (这个ip填写的是haproxy的ip)真实服务器上一级代理的IP地址或者IP段,可以写多行 不记录指定的ip


real_ip_header X-Forwarded-For; #从哪个header头检索出所要的IP地址


real_ip_recursive on #递归的去除所配置中的可信IP。排除set_real_ip_from里面出现的IP。如果出现了未出现这些IP段的IP,那么这个IP将被认为是用户的IP。






nginx配置如下:


vim nginx.conf


http
    {




      log_format  main  'Client ip:$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
        set_real_ip_from 192.168.67.154;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
}


虚拟主机配置:
vim  V_HOST.conf


server {


                                                access_log  /www/wwwlogs/5110.log main;


}


nginx输出的日志:
Client ip:192.168.67.68 - - [23/Aug/2019:14:54:03 +0800] GET / HTTP/1.1 200 24508 - Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0 192.168.67.68




备注:


(后面日志路径也要定义main 和Apache一样,属于一种日志格式)


在log_format里添加$remote_addr或者$http_x_forwarded_for参数。
分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS