在我的 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 地址。