performance improvement on proxy service

This commit is contained in:
JBB0807 2025-05-21 11:16:13 -07:00
parent eadf769ab3
commit 82f0ee709f
2 changed files with 51 additions and 39 deletions

View file

@ -60,29 +60,6 @@ auth.get("/current_user", (req, res) => {
} }
}); });
// router.get("/google/login", (req, res) => {
// if (req.user) {
// console.log(`${process.env.DB_USER_SERVICE_URL}instructor/register-user`);
// axios
// .post(`${process.env.DB_USER_SERVICE_URL}instructor/register-user`, {
// user: req.user,
// })
// .then((response) => {
// req.user.userId = response.data.user.userid;
// console.log("User ID:", response.data.user.userid);
// req.user.role = "instructor";
// console.log("User registration response:", response.data);
// res.redirect(process.env.LOGIN_REDIRECT_URL);
// })
// .catch((error) => {
// console.error("Error registering user:", error.message);
// res.status(500).json({ error: true, message: "User login failed" });
// });
// } else {
// res.status(403).json({ error: true, message: "Not Authorized" });
// }
// });
auth.get("/login/failed", (req, res) => { auth.get("/login/failed", (req, res) => {
res.status(401).json({ res.status(401).json({
error: true, error: true,

View file

@ -5,28 +5,63 @@ const app = express();
const port = 8080; const port = 8080;
// Middleware to handle dynamic IPv6 proxying // Middleware to handle dynamic IPv6 proxying
// app.use('/:ipv6', (req, res, next) => {
// const ipv6 = req.params.ipv6;
// // Validate or sanitize the IPv6 if needed
// const targetUrl = `http://[${ipv6}]:8000`;
// console.log(`Proxying request to: ${targetUrl}`);
// // Create and attach the proxy middleware *once per request*
// const proxy = createProxyMiddleware({
// target: targetUrl,
// changeOrigin: true,
// logLevel: 'debug',
// // pathRewrite: {
// // [`^/${ipv6}`]: '/', // Send to root of the target
// // },
// onError(err, req, res) {
// console.error('Proxy error:', err.message);
// res.status(502).send('Bad Gateway: Failed to connect to target');
// }
// });
// return proxy(req, res, next);
// });
// Cache proxy instances per target to avoid recreating each time
const proxyCache = new Map();
// Basic IPv6 validation pattern (can be improved or replaced with a library like 'ipaddr.js')
const isValidIPv6 = (ip) => /^[0-9a-fA-F:]+$/.test(ip);
app.use('/:ipv6', (req, res, next) => { app.use('/:ipv6', (req, res, next) => {
const ipv6 = req.params.ipv6; const ipv6 = req.params.ipv6;
// Validate or sanitize the IPv6 if needed if (!isValidIPv6(ipv6)) {
const targetUrl = `http://[${ipv6}]:8000`; return res.status(400).send('Invalid IPv6 address');
console.log(`Proxying request to: ${targetUrl}`); }
// Create and attach the proxy middleware *once per request* const targetUrl = `http://[${ipv6}]:8000`;
const proxy = createProxyMiddleware({ console.log(`Proxying to: ${targetUrl}`);
// Reuse proxy middleware for the same target
if (!proxyCache.has(targetUrl)) {
proxyCache.set(targetUrl, createProxyMiddleware({
target: targetUrl, target: targetUrl,
changeOrigin: true, changeOrigin: true,
logLevel: 'debug', logLevel: 'debug',
// pathRewrite: { pathRewrite: (path, req) => path.replace(`/${ipv6}`, '/'),
// [`^/${ipv6}`]: '/', // Send to root of the target
// },
onError(err, req, res) { onError(err, req, res) {
console.error('Proxy error:', err.message); console.error(`Proxy error for ${targetUrl}:`, err.message);
if (!res.headersSent) {
res.status(502).send('Bad Gateway: Failed to connect to target'); res.status(502).send('Bad Gateway: Failed to connect to target');
} }
}); }
}));
}
return proxy(req, res, next); return proxyCache.get(targetUrl)(req, res, next);
}); });
app.listen(port, '0.0.0.0', () => { app.listen(port, '0.0.0.0', () => {