Nginx反向代理 Laravel获取真实IP地址(PHP)
使用VUE前后端分离开发
后端使用Laravel 想要获取到用户的真实IP地址
因为分离开发不同源跨域问题 所以只能进行前端Nginx反向代理
location /api {
rewrite ^/api/(.*)$ /api/$ 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)的更多相关文章
- nginx反向代理如何获取真实IP?
由于客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址. 1.安装--with-http_realip_ ...
- 多级反向代理java获取真实IP地址
public static String getIpAddress(HttpServletRequest request){ String ip = request.getHeader("x ...
- nginx做反向代理时获取真实IP
原文:http://blog.csdn.net/aquester/article/details/48657395 1. 编译 对于client -> nginx reverse proxy - ...
- .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
公司项目最近出现获取访问域名.端口.IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数 ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...
- JSP 获取真实IP地址的代码
[转载]JSP 获取真实IP地址的代码 JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. ...
- 【转载】JSP 获取真实IP地址的代码
JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. 但是在通过了 Apache,Squid ...
- java 获取真实ip地址
/** * 获取真实ip地址 * @param request * @return */ public static String getIpAddress(HttpServletRequest re ...
随机推荐
- pl/sql实现金额转换为大写
FUNCTION upper_case_currency(vrmb char) RETURN varchar2 IS rmbwodecimal varchar2(20); result varchar ...
- ArcEngine开发鹰眼实现问题
在网上百度一下有关AE鹰眼实现的代码,基本是一样的,可问题是好多代码自己运行起来鹰眼却总是加不进地图.住视图axMapControl1.OnMapReplaced(),axMapControl1.On ...
- JAVA利用poi获取world文件内容
本文主要简单介绍了利用poi包,读取world文件内容. 这个依然存在版本的问题,只能读取doc结尾的老版本文件. 话不多说,上代码: import java.io.File; import java ...
- 微信小程序国际化
微信小程序国际化 现状 小程序国际化官方没有支持,也没有现成的插件. 网上有人做了国际化的尝试.但是只能替换静态文本,就是简单的键值匹配. vue-i18n 由于是基于html 和 vue, 不同于w ...
- selenium + python(鼠标操作)
关于最近学习selenium自动化测试鼠标操作的一些总结 常见的鼠标操作
- ubuntu 可以加速播放的播放器SMPlayer 16.4安装
直接贴命令 sudo apt-add-repository ppa:rvm/smplayer sudo apt-get update sudo apt-get install smplayer smp ...
- 【转载】#457 Converting Between enums and their Underlying Type
When you declare an enum, by default each enumerated value is represented internally with an int. (S ...
- sql server 数据库还原后sa连接不上原因
手动创建了一个同名数据库,然后还原以前或者别人的备份,还原虽然成功了,但是在VS中连接不上,原因可能是: 数据库的所有者中没有添加sa,方法即在数据库名上右击,然后选择文件,在所有者中添加上sa,应该 ...
- ul li一行两个显示
- SQLServer用存储过程实现插入更新数据
实现 1)有同样的数据,直接返回(返回值:0): 2)有主键同样,可是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create pr ...