Nginx反向代理 Laravel获取真实IP地址(PHP)
Posted 倔强新手猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反向代理 Laravel获取真实IP地址(PHP)相关的知识,希望对你有一定的参考价值。
使用VUE前后端分离开发
后端使用Laravel 想要获取到用户的真实IP地址
因为分离开发不同源跨域问题 所以只能进行前端nginx反向代理
location /api { rewrite ^/api/(.*)$ /api/$1 break; proxy_pass https://***.********.com; }
然后在后端获取IP地址的时候 通过原始方法
$request->getClientIp();
发现返回的只是代理服务器的IP地址
查找资料获得方法
在前端Nginx代理配置写入
location /api { rewrite ^/api/(.*)$ /api/$1 break; proxy_pass https://***.*********.com; } proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
插入之后进行Nginx重启发现warning错误
Starting nginx: nginx: [warn] could not build optimal proxy_headers_hash, you should increase either proxy_headers_hash_max_size: 512 or proxy_headers_hash_bucket_size: 64; ignoring proxy_headers_hash_bucket_size
然后进行查找资料 解决办法
在nginx.conf配置文件里面的http代码块里面加入
http{ ... proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400;
之后重启就没有报错信息了
但是使用
$request->getClientIp();
还是代理服务器IP地址
找到方法发现获取的是
REMOTE_ADDR
随后打印$_SERVER
发现真是的IP地址存在于
$_SERVER[‘HTTP_X_FORWARDED_FOR‘]
幸好我只有一处使用了这个IP 暂时用这个代替了
还有一个办法就是在
$request->getClientIp();
之前加入
$request->setTrustedProxies($request->getClientIps()); //这个可以放入到中间件中 这样就不用更改代码了 var_dump($request->getClientIp());
记录一下 以免忘记
以上是关于Nginx反向代理 Laravel获取真实IP地址(PHP)的主要内容,如果未能解决你的问题,请参考以下文章