Apache 反向代理,Laravel获取用户真实IP

本文介绍如何在Apache服务器中通过激活remoteip模块、配置代理与服务、修改日志格式来正确获取用户的真实IP地址,适用于前后端分离项目的反向代理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好多项目用到 前后端分离 结构,那这个时候就会涉及到反向代理的问题,OK ,那么在实际应用中,laravel 是如何获取用户真实的IP 地址呢? 下面就跟我一块来了解一下吧!!!

Apache (测试能够使用)

1. 激活加载remoteip模块

remoteip模块用于处理useragent,已识别的客户端,将请求作为实际客户端地址发起,而不是Apache可能正在接收的可能的负载均衡器,代理或其他前端服务器地址。
这意味着您的Apache Web服务器将覆盖它作为原始使用者接收的客户端IP地址,

激活
# a2enmod remoteip

开启remoteip 模块

vim apache2.conf
去掉 # 
LoadModule remoteip_module modules/mod_remoteip.so

2. 定义代理与服务

编辑要修改的web 应用配置


<VirtualHost *:80>
    ServerAdmin  xxxx
    DocumentRoot "xxxxxx"
    ServerName xxxxx.com
    ErrorLog "logs/dev.com-error.log"
    CustomLog "logs/dev.com-access.log" common

    
    ProxyRequests Off
    ProxyPass /api http://api.xxx.com/api
    ProxyPassReverse /api http://api.xxx.com/api


    RemoteIPHeader X-Forwarded-For            # 添加的内容
    RemoteIPTrustedProxy 192.168.1.10           # 添加的内容
</VirtualHost>

其中,

  • 添加任意数量的代理定义,以便在使用多个服务或负载平衡器时为来自这些代理的流量配置XFF标头的使用。添加多个代理的示例
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 192.168.1.10 10.10.0.1
  • 请注意,如果最终用户在内部网络中具有IP,则上面使用的RemoteIPTrustedProxy将不起作用。要接受内部网络IP(如果它符合您的环境需求),您还需要使用以下命令在配置文件中定义代理:
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 192.168.1.10

3. 配置Apache日志格式以使用X-Forwarded-For

# vim apache2.conf
在文件中搜索LogFormat行。Apache的标准日志记录格式如下所示,您可能会在文件中看到类似的内容。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combined

此格式使用%h字段捕获标头,默认情况下,我们将在示例中使用代理地址。由于我们希望在日志记录中使用原始客户端IP地址,因此您必须将LogFormat定义修改为如下所示:

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

请注意我们如何用字段%a替换原始标题字段位置(%h)。这是X-Forwarded-For字段,负责显示正确的始发客户端IP地址。只要您具有日志记录格式定义,请将%h替换为%a以使用X-Forwarded-For

Apache具有高度可配置性,您可以通过播放XFF标头字段的位置,进一步修改日志格式,直到它最适合您的格局和Web应用程序。如果对最终格式感到满意,请保存并退出文件。接下来,您需要重新加载Apache才能使更改生效。

在重新加载服务器之前,您可以使用Apache命令apache2ctl验证配置中是否有错误:
# apache2ctl configtest

如果上一步没有输出错误,您可以安全地重新加载到新配置以开始使用XFF。使用service命令重新启动Apache Web服务器:
# service apache2 restart

4. 结论

一旦您的Apache Web服务器重新启动,它将开始记录正确的客户IP地址信息,而不是您可能在您的环境中使用的任何中间人服务。您可以轻松地知道,如果您使用代理或其他类似服务,您的客户信息数据将100%保留。如果您发现它有用,请与您的朋友分享本教程!

5. 参考链接

Apache remoteip 模块 说明
如何在Apache Web Server中获取X-Forwarded-For IP地址

Nginx (未测试)

https://www.itread01.com/content/1543308020.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值