问题解析
在 Nest.js 应用中,当你试图通过 request.ip
获取客户端的 IP
地址时,如果总是返回 ::1
或者 ::ffff:127.0.0.1
,这通常意味着请求来自本地主机。
因为在前后端分离应用中,前端请求后端服务一般的做法都是通过代理,::1
是 IPv6
的 localhost
地址,相当于 IPv4
中的 127.0.0.1
,如果使用了本地代理,即配置了一个指向本地(localhost
或 127.0.0.1
)的代理,这个代理会导致前端的所有请求是从本地发出的。
要解决这个问题并获取客户端的真实 IP
地址,您需要确保代理服务器正确设置了转发头,比如 X-Forwarded-For
或 X-Real-IP
,并且您的后端服务能够正确读取这些头信息来确定客户端的 IP
地址。
解决方式
以我个人为例,我的前端应用是用 1Panel
面板,网站搭建是用的 OpenResty,当我们配置一个反向代理到本地后端服务时,我们可以看到源文:
location ^~