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.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地址的透传相关推荐
- 后台获得客户端IP地址
2019独角兽企业重金招聘Python工程师标准>>> 通常通过request.getRemoteAddr() 取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定request ...
- 如何在PHP中获取客户端IP地址[重复]
本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...
- 在ASP.NET Core中获取客户端IP地址
随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...
- 第10章 常用功能及函数集;客户端IP地址
1 客户端IP地址 txtIP.Text= Request.UserHostAddress; 2 创建随机数对象 Random rnd = new Random(); //调用N ...
- php获取ip几种方法区别,php获取客户端IP地址的几种方法
php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...
- Nginx在多层代理下获取真实客户端IP地址
最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...
- springboot 获取客户端ip_JAVA如何获取客户端IP地址和MAC地址
本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) ...
- thinkphp 获取客户端ip地址方法
/*** 获取客户端IP地址* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字* @param boolean $adv 是否进行高级模式获取(有可能被 ...
- ASP.NET获取真正的客户端IP地址的6种方法
在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的I ...
最新文章
- 哑谜,回文和暴力之美
- Linux Shell 命令--cut
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
- BM2 链表内指定区间反转
- ftb测试软件,EXFO推出FTB-2光纤测试平台
- 多项式的链式存储方案
- 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...
- java pdf分页显示_使用iText“重新分页”PDF
- Oracle数据库 1653错误
- 代码随想录第二天 leetcode 977、209、59
- C#实现多人语音聊天
- 靖哥哥教你如何在docker中安装mysql
- Html网页制作图片选择
- android调用高德地图接口,调用高德地图Api
- 飞蛾逐月优化算法(Matlab实现)
- beam_建筑beam管第二部分前端
- 小程序开发文档中没有告诉你的一些事情
- 企业数据资产管理平台建设方案(PPT)
- 推送跳转到对应的详情页(使用友盟推送的方式)
- php mcrypt openssl,用OpenSSL取代Mcrypt
热门文章
- python怎么安装各种模块_Python2.7安装和常用模块安装
- winscp开启ftp_如何使用winscp,如何使用winscp连接FTP
- python找出值为nan_Python Numpy:找到list中的np.nan值方法
- JavaScript中for..in循环陷阱介绍
- 计算机在识字教学中的应用,【多媒体技术论文】多媒体技术在小学识字教学中的应用(共3090字)...
- 第十六届全国大学生智能车竞赛文化衫LOGO主图案设计
- 基于ESP32的竞赛裁判系统功能调试-硬件修改建议
- 黑龙江智能车邀请赛中的单车比赛
- 英飞凌AI越野组入门教程
- 第十五届全国大学生智能汽车竞赛人工智能创意赛(预赛)