通过反向代理获取客户端 IP

通过反向代理获取客户端 IP

在我的 VPS 中,我托管了几个网站。每个网站都位于自己的 Linux 容器中。例如

站点 #1 -> 10.0.3.111

站点 #2 -> 10.0.3.112

站点 #3 -> 10.0.3.113

为了知道将每个请求重定向到哪里,我还在另一个 Linux 容器中安装了反向代理 nginx10.0.3.101

我遇到的问题是,在我的一个运行 Laravel 的网站中,我尝试获取客户端的 IP,如下所示:

<p>IP Address: {{ Request::getClientIp() }}</p>

问题是我一直获取的是时间10.0.3.101,而不是客户端的 IP。

我猜测 Laravel 获取的是最后一个发出请求的主机的 IP,而不是最初发起请求的主机的 IP。

有没有办法可以在不改变这个结构的情况下获取该 IP?

配置

这是我的 nginx 主机文件:

server {
        listen 80;
        server_name example.com www.example.com;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://10.0.3.115;
        }
}

答案1

您需要设置受信任的代理。在这种情况下getClientIp()将使用X-Forwarder-For标头来获取客户端 IP 地址。

相关内容