Api Mojolicous/Perl-从数据包中获取IP?

Api Mojolicous/Perl-从数据包中获取IP?,api,perl,mojolicious,Api,Perl,Mojolicious,我已经使用Perl'Mojolicious'框架编写了一个API,该框架通过CORS接收来自其他web服务器的请求,但是提取请求服务器的IP地址时遇到了问题 提取像X-Forwarded-For这样的头文件只提供客户端的IP地址?在Perl或Mojolicous中是否有任何方法可以从IP包本身提取源IP 使用内置的Mojolicious$self->tx->remote\u address方法不起作用,因为我的API web服务器位于Nginx反向代理的后面。我使用自己的助手src\u addr

我已经使用Perl'Mojolicious'框架编写了一个API,该框架通过CORS接收来自其他web服务器的请求,但是提取请求服务器的IP地址时遇到了问题

提取像
X-Forwarded-For
这样的头文件只提供客户端的IP地址?在Perl或Mojolicous中是否有任何方法可以从IP包本身提取源IP


使用内置的Mojolicious
$self->tx->remote\u address
方法不起作用,因为我的API web服务器位于Nginx反向代理的后面。

我使用自己的助手
src\u addr

use Net::IP::Lite;

$app->helper( src_addr => sub {
  my $c = shift;
  my $xff = $c->req->headers->header('X-Real-IP') // $c->req->headers->header('X-Forwarded-For') // '';

  if($xff) {
    for my $ip (reverse split(/[\s,]+/, $xff)) {
      next if ! ip_validate($ip);
      return $ip;
    }
  }
  return $c->tx->remote_address;
});
在nginx中:

    location / {
            proxy_read_timeout 300;
            proxy_pass http://localhost4:54329/;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto "https";
            proxy_set_header X-Forwarded-HTTPS 1;
    }

请参阅remote_address函数返回的是客户端IP,而不是调用my API的服务器的IP。调用API的“服务器”就是客户端。实际上,现在显示的是127.0.0.1,可能是因为my API web server在Nginx后面运行。您需要配置Nginx,以便将真实的客户端IP地址粘贴到其他环境变量中