diff --git a/app/Http/Middleware/CloudflareProxies.php b/app/Http/Middleware/CloudflareProxies.php index 72eb73d..e7417b5 100644 --- a/app/Http/Middleware/CloudflareProxies.php +++ b/app/Http/Middleware/CloudflareProxies.php @@ -17,12 +17,22 @@ class CloudflareProxies // 优先采纳 Cloudflare 的 CF-Connecting-IP if ($request->hasHeader('CF-Connecting-IP')) { $realIp = $request->header('CF-Connecting-IP'); - $request->server->set('REMOTE_ADDR', $realIp); - $request->headers->set('X-Forwarded-For', $realIp); } - // 其次兜底常见的国内 CDN 厂商(如腾讯云 EdgeOne / 阿里云 DCDN) + // 腾讯云 EdgeOne CDN 自定义回源头部(后台配置名:EO-Client-IP) + elseif ($request->hasHeader('EO-Client-IP')) { + $realIp = $request->header('EO-Client-IP'); + } + // 其他国内 CDN 厂商(阿里云 DCDN 等)通用头部 elseif ($request->hasHeader('X-Real-IP')) { $realIp = $request->header('X-Real-IP'); + } + // 最后兜底:取 X-Forwarded-For 最左边第一个(真实客户端)IP + // 格式为 "真实客户端, CDN节点1, CDN节点2" + elseif ($request->hasHeader('X-Forwarded-For')) { + $realIp = trim(explode(',', $request->header('X-Forwarded-For'))[0]); + } + + if (! empty($realIp)) { $request->server->set('REMOTE_ADDR', $realIp); $request->headers->set('X-Forwarded-For', $realIp); } diff --git a/routes/web.php b/routes/web.php index cefda8e..eb2cce5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -30,6 +30,7 @@ Route::post('/login', [AuthController::class, 'login'])->name('login.post'); // 处理退出登录 Route::post('/logout', [AuthController::class, 'logout'])->name('logout'); + // 聊天室系统内部路由 (需要鉴权) Route::middleware(['chat.auth'])->group(function () { // ---- 第六阶段:大厅与房间管理 ----