54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
/**
|
|
* 客户端检测工具函数
|
|
* 用于在服务器端从请求头中获取客户端信息
|
|
*/
|
|
|
|
/**
|
|
* 从请求头中检测客户端ID
|
|
* @param request - Remix Request对象
|
|
* @returns 客户端ID字符串
|
|
*/
|
|
export const detectClientFromRequest = (request: Request): string => {
|
|
// 从Nginx传递的头部获取客户端ID
|
|
const clientId = request.headers.get('X-Client-ID');
|
|
const originalPort = request.headers.get('X-Original-Port');
|
|
|
|
if (clientId) {
|
|
console.log(`🎯 检测到客户端ID: ${clientId} (端口: ${originalPort})`);
|
|
return clientId;
|
|
}
|
|
|
|
// 根据端口映射客户端ID(备用方案)
|
|
const portToClient: Record<string, string> = {
|
|
'5174': 'client-a',
|
|
'5175': 'client-b',
|
|
'5176': 'client-c',
|
|
'5177': 'client-d'
|
|
};
|
|
|
|
if (originalPort && portToClient[originalPort]) {
|
|
console.log(`🎯 通过端口映射检测到客户端: ${portToClient[originalPort]} (端口: ${originalPort})`);
|
|
return portToClient[originalPort];
|
|
}
|
|
|
|
console.log('⚠️ 未能检测到客户端ID,使用默认值: main');
|
|
return 'main';
|
|
};
|
|
|
|
/**
|
|
* 获取请求的调试信息
|
|
* @param request - Remix Request对象
|
|
* @returns 调试信息对象
|
|
*/
|
|
export const getRequestDebugInfo = (request: Request) => {
|
|
return {
|
|
url: request.url,
|
|
method: request.method,
|
|
clientId: request.headers.get('X-Client-ID'),
|
|
originalPort: request.headers.get('X-Original-Port'),
|
|
forwardedPort: request.headers.get('X-Forwarded-Port'),
|
|
realIp: request.headers.get('X-Real-IP'),
|
|
forwardedFor: request.headers.get('X-Forwarded-For'),
|
|
userAgent: request.headers.get('User-Agent')
|
|
};
|
|
}; |