如何在 nextjs 的 middleware 里面获取请求的 ip

2023-07-07 10:54:34 +08:00
 fyxtc
按照网上搜的方法:下面三个字段都是空
request.ip
request.headers.get('x-real-ip')
request.headers.get('x-forwarded-for')

看了下 nextjs 文档对 request.ip 的描述:
ip: (string || undefined) - Has the IP address of the Request. This information is provided by your hosting platform.

没怎么看懂,什么叫让我自己平台提供
1088 次点击
所在节点    问与答
12 条回复
mikurasa
2023-07-07 11:10:52 +08:00
export const getServerSideProps = requireAuth(async (ctx) => {
console.log(ctx.req.headers['x-forwarded-for'])
}
mikurasa
2023-07-07 11:12:13 +08:00
我之前找了半天 好像只能在服务组件上下文里面获取 IP
不知道因为什么只能这么设计
fyxtc
2023-07-07 11:14:18 +08:00
@mikurasa 兄弟会错意了吧,你这个是在 tsx 里面调用的吧,middleware.ts 是在 nextjs 的 edge runtime 运行的
fyxtc
2023-07-07 11:17:45 +08:00
@mikurasa 我也找了半天,都是空,难受,他那个 middleware 利用了 nodejs 的 http 改造的,但是又不全是 nodejs 环境,fs 都没有,记录日志都不行,真的搞我
mikurasa
2023-07-07 11:21:11 +08:00
@fyxtc 我之前也试过 我最后只能在 tsx 里面获取 我理解它是服务端组件 应该就是在 node http 里面计算的吧
blankmiss
2023-07-07 11:23:08 +08:00
网关给
mikurasa
2023-07-07 11:28:03 +08:00
@fyxtc 日志要靠别的库
mikurasa
2023-07-07 11:32:25 +08:00
mikurasa
2023-07-07 11:34:14 +08:00
fs 没有 这是够坑的 我之前有个库强制依赖 fs
搞的我把服务从 vercel 迁移到服务器上了
fyxtc
2023-07-07 11:45:08 +08:00
@mikurasa 我搞了一下发现,如果不使用 pm2 启动的话直接 dev/start ,request.headers 里面是有 x-forwarded-for 字段的。这又是为什么。。。。😂
mikurasa
2023-07-07 11:48:13 +08:00
@fyxtc 我之前也试过 我要获取 IP 拿 IP 位置 我试了半天只能靠这样拿了。。虽然有点丑陋
LLaMA2
2023-07-07 12:00:04 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX