站点图标 江湖人士

使用Cloudflare后Outsystems获取客户端真实IP地址

今天遇到一个问题,就是使用Cloudflare后Outsystems获取客户端真实IP地址的问题,是这样的,当使用Outsystems开发的项目部署到Microsoft Azure后,并且套了CDN,当然就是Cloudflare啦,调用GetIP这个action被发现总是拿到的是同一个地址,于是排查后就有了本文了。

使用Cloudflare后Outsystems获取客户端真实IP地址

OutSystems使用Cloudflare后如何获取真实IP?当我们将OutSystems开发的Web项目部署到服务器并使用Cloudflare时,如果我们想获取客户端的真实IP地址,我们不能简单地调用HTTPRequestHandler提供的GetIP动作。如果你这样做,你将得到的只是一个Cloudflare代理地址。

OutSystems使用Cloudflare后如何获取真实IP

正是因为我们使用了Cloudflare,所以无法通过直接调用GetIP动作来获取真实的IP地址。关于这方面,Cloudflare社区中有关于这方面的讨论,我们可以在这里查看

所有与 Cloudflare 的 HTTP 连接都会在标头中返回访客 IP 地址:
X-Forwarded-For 标头
CF-Connecting-IP 标头

了解了以上原因之后,剩下的就很简单了。我们只需要调用 GetRequestHeader 来获取对应的 Header,这样我们就可以获取到客户端的真实 IP 地址

使用 Cloudflare 时,您的服务器看到的 IP 地址是 Cloudflare 代理的 IP,而不是发出请求的客户端的真实 IP。要在 OutSystems 应用程序中获取真实的客户端 IP,您可以从 Cloudflare 设置的 HTTP 标头中检索它。Cloudflare 通常会在标头中发送真实的 IP 地址。CF-Connecting-IP

以下是在OutSystems中执行此操作的方法:

在OutSystems中检索真实客户端IP的步骤:

  1. 访问请求标头
  1. 设置逻辑以提取 IP

示例实现:

  1. 添加服务器操作
  1. 配置 GetRequestHeader
  1. 返回 IP

示例代码:

HeaderName =“CF-Connecting-IP”
ClientIP = HTTPRequestHandler。GetRequestHeader(HeaderName)

OutSystems使用Cloudflare后如何获取真实IP?

其它注意事项:

调试:

通过执行这些步骤,您的 OutSystems 应用程序将能够检索真实的客户端 IP 地址,即使在 Cloudflare 后面也是如此。

退出移动版