You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

负载均衡器与Cloudflare下获取访客真实IP:Apache与Laravel适配问题

解决Laravel在Cloudflare+IONOS负载均衡环境下的真实IP获取问题

问题根源

你的环境代理链是「真实访客 → Cloudflare → IONOS负载均衡 → Apache服务器」。配置Apache的remoteip_module后,X-Forwarded-For被重写为真实访客IP, 10.7.224.225(负载均衡IP)。而Laravel默认当$proxies = '*'时,会将X-Forwarded-For列表的最后一个IP判定为客户端IP(因为它认为最后一个是最近的代理节点),这就导致Laravel错误地返回了负载均衡IP。


解决方案

1. 修正TrustProxies中间件配置

打开app/Http/Middleware/TrustProxies.php,替换为以下配置:

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    /**
     * 可信代理IP/IP段
     * 包含Cloudflare所有公网IP段 + IONOS负载均衡内部IP
     */
    protected $proxies = [
        // Cloudflare IPv4段
        '103.21.244.0/22',
        '103.22.200.0/22',
        '103.31.4.0/22',
        '104.16.0.0/13',
        '104.24.0.0/14',
        '108.162.192.0/18',
        '131.0.72.0/22',
        '141.101.64.0/18',
        '162.158.0.0/15',
        '172.64.0.0/13',
        '173.245.48.0/20',
        '188.114.96.0/20',
        '190.93.240.0/20',
        '197.234.240.0/22',
        '198.41.128.0/17',
        // Cloudflare IPv6段(按需启用)
        '2400:cb00::/32',
        '2606:4700::/32',
        '2803:f800::/32',
        '2405:b500::/32',
        '2405:8100::/32',
        '2a06:98c0::/29',
        '2c0f:f248::/32',
        // IONOS负载均衡内部IP
        '10.7.224.225',
    ];

    /**
     * 指定Laravel优先读取的代理头
     * 同时支持CF-Connecting-IP和X-Forwarded-For
     */
    protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_CF_CONNECTING_IP;
}
  • 用具体的可信代理IP替换*,既避免安全风险,又让Laravel正确识别代理链顺序,自动取X-Forwarded-For列表的第一个IP作为真实访客IP。
  • 配置$headers后,Laravel会优先从可信代理提供的CF-Connecting-IP或X-Forwarded-For头中获取真实IP。

2. 规范Apache的RemoteIP配置(可选但推荐)

在Plesk的Apache额外配置中添加以下内容:

RemoteIPTrustedProxy 10.7.224.225
RemoteIPHeader CF-Connecting-IP
  • RemoteIPTrustedProxy指定仅信任IONOS负载均衡的IP,避免恶意客户端伪造CF-Connecting-IP头。
  • 确保Apache只处理来自可信负载均衡的代理头,进一步提升安全性。

3. 验证配置

  • 在Laravel代码中用request()->ip()测试返回值,确认是真实访客IP。
  • 检查Apache访问日志,确认日志记录的IP正确。
  • 打印request()->headers->all(),查看X-Forwarded-For和CF-Connecting-IP的内容是否符合预期。

内容的提问来源于stack exchange,提问作者PeteB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:41:18