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

这篇具有很好参考价值的文章主要介绍了Go新项目-Golang使用RemoteAddr()获取远程主机地址的注意事项(9)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go新项目-Golang使用RemoteAddr()获取远程主机地址的注意事项(9),Go,golang,开发语言,后端

一、问题描述

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 两个请求头上,然后根据需要再从它们的值获取。文章来源地址https://www.toymoban.com/news/detail-808883.html

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

到了这里,关于Go新项目-Golang使用RemoteAddr()获取远程主机地址的注意事项(9)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go新项目-配置文件的选取及区别和写法(1)

    先说结论:我们选型TOML yaml,toml,json,ini 实际业务都有用 实际栗子是:我们想要把Go的切片作为配置文件,YAML写起来比较吃力,TOML就很容易了。 配置文件是用于配置计算机程序的参数、初始化设置的文件、业务数据公共配置等。如果没有这些配置,我们的程序就会硬编码

    2024年01月18日
    浏览(43)
  • Ubuntu22.04中安装Golang1.20和Goland,并创建一个新项目

    1.打开Linux的浏览器进入网址All releases - The Go Programming Language下载“go1.20.2.linux-amd64.tar.gz”。 2.打开下载到的文件夹,输入命令 sudo mv go1.20.2.linux-amd64.tar.gz  /usr/local 将安装包移动到/usr/local目录下 3.在/usr/local文件夹下打开终端,输入命令 sudo tar -zxf go1.20.2.linux-amd64.tar.gz 解压安

    2024年02月06日
    浏览(58)
  • Go新项目-Gin中wire的依赖注入方式实战(6)

    选型Go项目过程中,针对依赖注入方式的分析和使用 https://go.dev/blog/wire https://medium.com/@dche423/master-wire-cn-d57de86caa1b https://toutiao.io/posts/et0t2lk/preview https://imlht.com/archives/223/ https://lailin.xyz/post/go-training-week4-wire.html https://luenci.me/2022/01/08/%E8%81%8A%E8%81%8AWire%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%

    2024年01月18日
    浏览(41)
  • idea新项目怎么绑定git 如何在idea中将自己的项目添加到Git上并且推送到远程仓库

    1、使用idea打开项目  2、选择项目,选中之后项目文件会变红   选中之后项目文件会变红 3、右键项目选择git---》add,add之后项目文件会变绿 add之后项目文件会变绿  4、点击idea右边的对钩√,默认会选中所有文件,添加注释,选择commit and push    5、确定commit and push  6、复

    2024年02月11日
    浏览(46)
  • 如何使用Visual Studio创建第一个新项目

    第一步,打开Visual Studio进行创建新项目 这里可以选择空项目 在这里设置项目名称及位置(建议新建一个文件夹存放自己的代码) 在源文件里新建 新建源文件进行编写代码 这里可以选择文件类型设置名称 编写程序后,进行运行 如果没有错误的话,运行成功 到这里的话,你

    2024年02月12日
    浏览(51)
  • 如何使用Vue的ui界面创建一个新项目

    第一步: win+r打开命令提示符,然后输入cmd后回车。 第二步: 在命令行输入命令vue ui(中间有空格)后回车,弹出ui界面。 第三步: 点击创建,双击地址栏确定我们要保存框架的地址,回车确定该地址,然后点击下面的   第四步: 完成第三步进入以下界面: 依次输入项目名

    2024年02月05日
    浏览(49)
  • 编程语言:微软 Azure CTO 表示,是时候停止在新项目中使用 C 和 C++

    Azure CTO Mark Russinovich 说,业界应该将 C 和 C++ 语言视为“已弃用”。 Windows 11 22H2:如何获得微软最新的操作系统更新以及接下来会发生什么 Microsoft Azure 的首席技术官 Mark Russinovich 表示,出于安全性和可靠性的考虑,开发人员应避免在新项目中使用 C 或 C++ 编程语言,而应使用

    2024年02月06日
    浏览(47)
  • 新项目搞完啦!!!

    大家好,我是鱼皮。 经过了 7 场直播,总时长近 20 小时,我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目,完结啦! 我在这里对该项目做一个简单的总结,希望让更多需要它的同学看到,把它变成自己的项目~ 这次做的是一个顺应潮流的项目, 基于

    2024年02月11日
    浏览(52)
  • Gitlab 新项目搭建

    项目名称与本地新建项目名称相同 进入本地项目根目录下,右击 git bash here打开命令窗口; 初始化本地仓库; 提交至暂存区; 提交项目。 建立本地仓库和远端 Gitlab 仓库关系; 2.拉取一下远程仓库内容; 推送本地内容到远程仓库。 出现以下问题: 原因就是 Gitlab 的仓库中

    2024年02月13日
    浏览(50)
  • 笔记 | FastAPI创建新项目

    当使用FastAPI创建项目时,首先需要安装FastAPI和其依赖项。可以使用pip来安装它们。请确保已经安装了Python和pip。 创建项目文件夹并进入该文件夹: 创建并激活一个新的Python虚拟环境(可选,但强烈推荐): 安装FastAPI和uvicorn(FastAPI的服务器): 创建一个名为 main.py 的文件

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包