diff --git a/server/index.ts b/server/index.ts index 091180a7..4ed2a5df 100644 --- a/server/index.ts +++ b/server/index.ts @@ -97,7 +97,10 @@ app // Register HTTP proxy if (settings.network.proxy.enabled) { - await createCustomProxyAgent(settings.network.proxy); + await createCustomProxyAgent( + settings.network.proxy, + settings.network.forceIpv4First + ); } // Migrate library types diff --git a/server/utils/customProxyAgent.ts b/server/utils/customProxyAgent.ts index 60f8be6e..11f56980 100644 --- a/server/utils/customProxyAgent.ts +++ b/server/utils/customProxyAgent.ts @@ -11,9 +11,14 @@ export let requestInterceptorFunction: ( ) => InternalAxiosRequestConfig; export default async function createCustomProxyAgent( - proxySettings: ProxySettings + proxySettings: ProxySettings, + forceIpv4First?: boolean ) { - const defaultAgent = new Agent({ keepAliveTimeout: 5000 }); + const defaultAgent = new Agent({ + keepAliveTimeout: 5000, + connections: 50, + connect: forceIpv4First ? { family: 4 } : undefined, + }); const skipUrl = (url: string | URL) => { const hostname = @@ -67,16 +72,23 @@ export default async function createCustomProxyAgent( uri: proxyUrl, token, keepAliveTimeout: 5000, + connections: 50, + connect: forceIpv4First ? { family: 4 } : undefined, }); setGlobalDispatcher(proxyAgent.compose(noProxyInterceptor)); - axios.defaults.httpAgent = new HttpProxyAgent(proxyUrl, { + const agentOptions = { headers: token ? { 'proxy-authorization': token } : undefined, - }); - axios.defaults.httpsAgent = new HttpsProxyAgent(proxyUrl, { - headers: token ? { 'proxy-authorization': token } : undefined, - }); + keepAlive: true, + maxSockets: 50, + maxFreeSockets: 10, + timeout: 5000, + scheduling: 'lifo' as const, + family: forceIpv4First ? 4 : undefined, + }; + axios.defaults.httpAgent = new HttpProxyAgent(proxyUrl, agentOptions); + axios.defaults.httpsAgent = new HttpsProxyAgent(proxyUrl, agentOptions); requestInterceptorFunction = (config) => { const url = config.baseURL