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.conflog_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.在配置文件中调用此文件

[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 webbind 172.20.27.20:80mode http              #模式改为httpoption 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 webbind 172.20.27.20:80mode tcp               #将mode改为tcpoption 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的模式下被传送过来

转载于:https://blog.51cto.com/11886307/2406608

HAProxy客户端IP地址的透传相关推荐

  1. 后台获得客户端IP地址

    2019独角兽企业重金招聘Python工程师标准>>> 通常通过request.getRemoteAddr() 取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定request ...

  2. 如何在PHP中获取客户端IP地址[重复]

    本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...

  3. 在ASP.NET Core中获取客户端IP地址

    随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...

  4. 第10章 常用功能及函数集;客户端IP地址

    1 客户端IP地址    txtIP.Text= Request.UserHostAddress; 2 创建随机数对象      Random rnd = new Random();    //调用N ...

  5. php获取ip几种方法区别,php获取客户端IP地址的几种方法

    php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...

  6. Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  7. springboot 获取客户端ip_JAVA如何获取客户端IP地址和MAC地址

    本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) ...

  8. thinkphp 获取客户端ip地址方法

    /*** 获取客户端IP地址* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字* @param boolean $adv 是否进行高级模式获取(有可能被 ...

  9. ASP.NET获取真正的客户端IP地址的6种方法

    在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的I ...

最新文章

  1. 哑谜,回文和暴力之美
  2. Linux Shell 命令--cut
  3. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
  4. BM2 链表内指定区间反转
  5. ftb测试软件,EXFO推出FTB-2光纤测试平台
  6. 多项式的链式存储方案
  7. 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...
  8. java pdf分页显示_使用iText“重新分页”PDF
  9. Oracle数据库 1653错误
  10. 代码随想录第二天 leetcode 977、209、59
  11. C#实现多人语音聊天
  12. 靖哥哥教你如何在docker中安装mysql
  13. Html网页制作图片选择
  14. android调用高德地图接口,调用高德地图Api
  15. 飞蛾逐月优化算法(Matlab实现)
  16. beam_建筑beam管第二部分前端
  17. 小程序开发文档中没有告诉你的一些事情
  18. 企业数据资产管理平台建设方案(PPT)
  19. 推送跳转到对应的详情页(使用友盟推送的方式)
  20. php mcrypt openssl,用OpenSSL取代Mcrypt

热门文章

  1. python怎么安装各种模块_Python2.7安装和常用模块安装
  2. winscp开启ftp_如何使用winscp,如何使用winscp连接FTP
  3. python找出值为nan_Python Numpy:找到list中的np.nan值方法
  4. JavaScript中for..in循环陷阱介绍
  5. 计算机在识字教学中的应用,【多媒体技术论文】多媒体技术在小学识字教学中的应用(共3090字)...
  6. 第十六届全国大学生智能车竞赛文化衫LOGO主图案设计
  7. 基于ESP32的竞赛裁判系统功能调试-硬件修改建议
  8. 黑龙江智能车邀请赛中的单车比赛
  9. 英飞凌AI越野组入门教程
  10. 第十五届全国大学生智能汽车竞赛人工智能创意赛(预赛)