Api Mojolicous/Perl-从数据包中获取IP?
我已经使用Perl'Mojolicious'框架编写了一个API,该框架通过CORS接收来自其他web服务器的请求,但是提取请求服务器的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
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地址粘贴到其他环境变量中