修复:支持腾讯云 EdgeOne EO-Client-IP 头部,重构中间件真实IP获取优先级
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 () {
|
||||
// ---- 第六阶段:大厅与房间管理 ----
|
||||
|
||||
Reference in New Issue
Block a user