您所在的位置:首页 / 知识分享

HAProxy客户端IP地址的透传

2021.04.11

525

HAProxy客户端IP地址的透传

HAProxy客户端IP地址的透传

环境准备

server IP
client 172.20.27.10
haproxy 172.20.27.20,192.168.27.10
nginx 192.168.27.21

nginx操作

1.首先对nginx的主配置中的日志做修改

[root@nginx ~]# vim /apps/nginx/conf/nginx.conf log_format access_json '{"@timestamp":"$time_iso8601",'       '"host":"$server_addr",'       '"clientip":"$remote_addr",'       '"size":$body_bytes_sent,'       '"responsetime":$request_time,'       '"upstreamtime":"$upstream_response_time",'       '"upstreamhost":"$upstream_addr",'       '"http_host":"$host",'       '"uri":"$uri",'       '"domain":"$host",'       '"xff":"$http_x_forwarded_for",' #使用http透传       '"referer":"$http_referer",'       '"tcp_xff":"$proxy_protocol_addr",' #使用tcp透传       '"http_user_agent":"$http_user_agent",'       '"status":"$status"}';

2.在server段配置文件中调用此日志格式

[root@nginx ~]# vim /apps/nginx/conf/servers/mylinuxops.conf  server {
        server_name www.mylinuxops.com;
        listen 80;
        access_log  /apps/nginx/logs/mylinuxops.log  access_json;
        location / {
                root /data/www;
                index index.html;
        }
}

配置HAProxy(http透传)

未使用http透传前

[root@nginx ~]# tail /apps/nginx/logs/mylinuxops.log  {"@timestamp":"2019-06-04T16:30:47+08:00",   "host":"192.168.27.21",   "clientip":"172.20.27.10",   "size":19,   "responsetime":0.000,   "upstreamtime":"-",   "upstreamhost":"-",   "http_host":"www.mylinuxops.com",   "uri":"/index.html",   "domain":"www.mylinuxops.com",   "xff":"-",   "referer":"-",   "tcp_xff":"",   "http_user_agent":"curl/7.29.0",   "status":"200"} #xff显示为"-"

修改HAProxy配置文件,使用http模式下的ip透传

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg  listen web bind 172.20.27.20:80
 mode http #模式改为http option forwardfor #开启forwardfor选项 server web1 www.mylinuxops.com:80 check inter 3000 fall3 rise 5

测试
使用客户端访问

[root@client ~]# curl www.mylinuxops.com www.mylinuxops.com

查看nginx上的日志

[root@nginx ~]# tail -f /apps/nginx/logs/mylinuxops.log  {"@timestamp":"2019-06-04T17:29:22+08:00",   "host":"192.168.27.21",   "clientip":"192.168.27.10",   "size":19,   "responsetime":0.000,   "upstreamtime":"-",   "upstreamhost":"-",   "http_host":"www.mylinuxops.com",   "uri":"/index.html",   "domain":"www.mylinuxops.com",   "xff":"172.20.27.10",   "referer":"-",   "tcp_xff":"",   "http_user_agent":"curl/7.29.0",   "status":"200"} #"xff":"172.20.27.10" 客户端的地址被透传过来了

配置HAProxy(tcp透传)

1.修改HAProxy配置文件

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg  listen web bind 172.20.27.20:80
 mode tcp #将mode改为tcp option forwardfor #开启forwardfor选项 server web1 www.mylinuxops.com:80 send-proxy check inter 3000 fall 3 rise 5 #在定义后端服务时加上 send-proxy参数。

2.修改nginx的配置文件

[root@nginx ~]# vim /apps/nginx/conf/servers/mylinuxops.conf  server {
        server_name www.mylinuxops.com;
        listen 80 proxy_protocol; #在listen选项后添加proxy_protocol选项 access_log  /apps/nginx/logs/mylinuxops.log  access_json;
        location / {
                root /data/www;
                index index.html;
        }
}

测试
使用客户端访问

[root@client ~]# curl www.mylinuxops.com www.mylinuxops.com

在nginx上查看日志

[root@nginx ~]# tail -f /apps/nginx/logs/mylinuxops.log  {"@timestamp":"2019-06-04T17:43:57+08:00",   "host":"192.168.27.21",   "clientip":"192.168.27.10",   "size":19,   "responsetime":0.000,   "upstreamtime":"-",   "upstreamhost":"-",   "http_host":"www.mylinuxops.com",   "uri":"/index.html",   "domain":"www.mylinuxops.com",   "xff":"-",   "referer":"-",   "tcp_xff":"172.20.27.10",   "http_user_agent":"curl/7.29.0",   "status":"200"} #"tcp_xff":"172.20.27.10"  客户端的地址在tcp的模式下被传送过来

相关新闻

用户真的看懂你的设计了吗?

2019.01.21

2113

前段时间个人所得税app上线,用户可以在线办理个税专项扣除申报。我自己也尝试使用了一波,在申请房贷利息抵扣的时候发现了一个问题…

微信定制开发-客美美

2015.08.28

4129

微信定制开发-客美美