fix(proxy): handle blocked CONNECT resets
This commit is contained in:
@@ -329,6 +329,11 @@ function createBridge(port, profileName) {
|
|||||||
const portNum = Number(portStr || 443);
|
const portNum = Number(portStr || 443);
|
||||||
const { config: upstreamConfig, overrideProfile } = getUpstream(profileName, `https://${req.url}/`, host);
|
const { config: upstreamConfig, overrideProfile } = getUpstream(profileName, `https://${req.url}/`, host);
|
||||||
const upstream = parseProxyConfig(upstreamConfig);
|
const upstream = parseProxyConfig(upstreamConfig);
|
||||||
|
let upstreamSocket;
|
||||||
|
|
||||||
|
clientSocket.on('error', () => {
|
||||||
|
if (upstreamSocket) upstreamSocket.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
log('INFO', id, 'connect', { port, profile: profileName, override: overrideProfile, target: req.url, upstream: upstreamConfig });
|
log('INFO', id, 'connect', { port, profile: profileName, override: overrideProfile, target: req.url, upstream: upstreamConfig });
|
||||||
|
|
||||||
@@ -336,7 +341,7 @@ function createBridge(port, profileName) {
|
|||||||
return clientSocket.end('HTTP/1.1 403 Forbidden\r\n\r\n');
|
return clientSocket.end('HTTP/1.1 403 Forbidden\r\n\r\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
const upstreamSocket = net.connect(upstream.type === 'PROXY' ? upstream.port : portNum, upstream.type === 'PROXY' ? upstream.host : host, () => {
|
upstreamSocket = net.connect(upstream.type === 'PROXY' ? upstream.port : portNum, upstream.type === 'PROXY' ? upstream.host : host, () => {
|
||||||
if (upstream.type === 'PROXY') {
|
if (upstream.type === 'PROXY') {
|
||||||
if (!AUTH_HEADER) refreshAuth();
|
if (!AUTH_HEADER) refreshAuth();
|
||||||
upstreamSocket.write(`CONNECT ${req.url} HTTP/1.1\r\nHost: ${req.url}\r\n`);
|
upstreamSocket.write(`CONNECT ${req.url} HTTP/1.1\r\nHost: ${req.url}\r\n`);
|
||||||
@@ -379,7 +384,6 @@ function createBridge(port, profileName) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
upstreamSocket.on('error', () => clientSocket.end('HTTP/1.1 502 Bad Gateway\r\n\r\n'));
|
upstreamSocket.on('error', () => clientSocket.end('HTTP/1.1 502 Bad Gateway\r\n\r\n'));
|
||||||
clientSocket.on('error', () => upstreamSocket.end());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen(port, LISTEN_HOST, () => {
|
server.listen(port, LISTEN_HOST, () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user