Go新项目-Golang使用RemoteAddr()获取远程主机地址的注意事项(9)

在这里插入图片描述

一、问题描述

http.Request 下的方法RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。

使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取ip,客户端地址都是127.0.0.1 。

对于这个问题一直百思不得其解,最后搞了半天才发现是nginx 的原因。

因为线上项目使用nginx做了反向代理,所以导致服务端每次获取的都是nginx的地址,即127.0.0.1 。

关于这个问题的具体的内容可以查看:HTTP协议中的X-Real-IP, X-Forwarded-For和remote_addr头

二、解决方法

当http请求不存在代理的时候,使用这个方法时没有问题的,但是在有代理的情况下,就只能通过其他的方法来获取了。

如果是nginx ,可以在代理的代码块加上以下代码:

location / {...proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.234.131;...
}

在nginx转发前把真实地址设置到X-Real-IP 和X-Forwarded-For 两个请求头上,然后根据需要再从它们的值获取。

func getCurrentIP(r http.Request)(string){// 这里也可以通过X-Forwarded-For请求头的第一个值作为用户的ip// 但是要注意的是这两个请求头代表的ip都有可能是伪造的ip := r.Header.Get("X-Real-IP")if ip == ""{// 当请求头不存在即不存在代理时直接获取ipip = strings.Split(r.RemoteAddr, ":")[0]}return ip
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/414770.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gma 2.0.5 (2024.01.18) 更新日志(含 GmaGIS alpha-0 版)

安装 gma 2.0.5 pip install gma2.0.5注意:此版本没有Linux版! 编译gma的Linux虚拟机没有时间修复,本期Linux版继续暂停发布。 优化 1、climet.Index:现在,数据规定化处理时,Axis 轴上 Periodicity 内的每…

编译不带版本后缀的x264库

原始版本的x264编译动态库的话,生成的库名是这样的:libx264.so.163, 或libx264-163.dll。 make install后会生成软链接为 libx264.so 。那怎样不要这个后缀,也不要软链接,就要个libx264.so就得了呢?修改方式如下&…

CorelDRAW2024国内专业免激活版下载安装教程

CorelDRAW Graphics Suite2024订阅版涵盖了全部CorelDRAW图形处理组件,能够高效地完成矢量插图、布局、照片编辑和排版等项目,无论是个人用户还是大型企业,订阅版可以满足几乎所有设计从业者的工作需要,同时订阅版具有更优惠的价格…

SafeTpack—基于AURIX 2G的功能安全目标解决方案

产品概述 SafeTpack是专门针对于英飞凌AURIX 2G系列芯片的功能安全解决方案,由英飞凌下属子公司Hitex按照ISO26262-10作为独立于环境的安全要素(SEOOC)研发。根据ISO26262-5中的要求,系统需要根据不同ASIL等级的要求,针…

如何使用JS逆向爬取网站数据

引言: JS逆向是指利用编程技术对网站上的JavaScript代码进行逆向分析,从而实现对网站数据的抓取和分析。这种技术在网络数据采集和分析中具有重要的应用价值,能够帮助程序员获取网站上的有用信息,并进行进一步的处理和分析。 基…

Element-ui自定义表格头部-添加筛选条件

1.引用el-table-column属性render-header 2.在表格配置中自定义该方法 3.实现自定义需求 // 自定义某列表头为时间搜索renderDate(h, { column }) {return h(el-date-picker,{props: {value: this.selectTime,type: date,placeholder: 请选择排班时间,valueFormat: yyyy-MM-dd…

数据中台:数字化转型的加速器_光点科技

在数字化转型的浪潮中,企业正面临着前所未有的挑战与机遇。这一转型过程触及组织架构、业务流程、文化和技术的多个层面,其中数据的角色无疑是至关重要的。数据不仅能够帮助企业深入理解客户需求,还能够优化业务流程,并为战略决策…

Springboot集成JavaMail Sender发送邮件

1、开启邮箱的POP3/IMAP/SMTP服务&#xff0c;本地客户端可以收发短信 生成授权码 2、添加JavaMail Sender依赖 spring-boot-starter-mail 是 Spring Boot 的一个 Starter&#xff0c;它提供了集成 JavaMail Sender 和对应配置的自动配置。 <dependency><groupId&g…

UI自动化Selenium BeautifulReport报告中展示用例描述

BeautifulReport安装并运行后&#xff0c;发现用例描述为空NULL&#xff1b;怎么定义每个Testcase的用例描述并展示在报告中呢&#xff1f; 其实很简单&#xff1a; 只需要在每个测试方法第一行加上注释内容 即可&#xff1b; 当然也可以通过ddt 方式 在Excel中定义好用例描述…

外贸建站服务器如何选?海洋建站主机推荐?

外贸建站用哪个服务器比较好&#xff1f;独立网站怎么选择主机&#xff1f; 随着全球化的趋势&#xff0c;外贸网站的建设越来越受到企业的重视。然而&#xff0c;要想让外贸网站稳定、安全、可靠地运行&#xff0c;选择合适的外贸建站服务器是关键。海洋建站将详细介绍如何选…

【汉诺塔】经典递归问题(Java实现)图文并茂讲解

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&#…

司铭宇老师:房地产销售新人培训:房地产销售知识

房地产销售新人培训&#xff1a;房地产销售知识 1.客户沟通与谈判技巧 &#xff08;1&#xff09;倾听与理解客户需求 &#xff08;2&#xff09;善于运用FABE法则说服客户 &#xff08;3&#xff09;把握谈判节奏&#xff0c;掌握谈判主动权 &#xff08;4&#xff09;应…