Странное поведение обратного прокси
Моя цель - настроить http / https прокси для https://redirectinspector.com/.
В Google App Engine есть несколько геозон, поэтому я использую это. Я создал сервер с использованием nodejs и развернул используемую стандартную среду. Как я видел в движке стека драйверов, доступ не предоставляется. Он хорошо работает на локальном хосте, но если мы развернем его, он потерпит неудачу, потому что никогда не выполнится. Перед созданием собственного сервера (без дополнительных библиотек) я развернул два других прокси-сервера (anyproxy и http-proxy) и получил тот же ответ. Это похоже на ошибку.
ниже развернутый код
'use strict';
const http = require('http');
const net = require('net');
const url = require('url');
const proxyServer = http.createServer((clientReq, clientRes) => {
console.log('on Request');
console.log(clientReq.url);
if (clientReq.url === '/') {
clientRes.end('Use as proxy, no direct invocation')
} else {
const proxy = http.request(
clientReq.url,
{
headers: clientReq.headers,
method: clientReq.method
}
);
proxy.on('response', (serverRes) => {
clientRes.writeHead(
serverRes.statusCode,
serverRes.headers
);
serverRes.pipe(clientRes, {end: true});
});
clientReq.pipe(proxy, {end: true})
}
});
proxyServer.on('connect', (clientRequest, clientSocket) => {
console.log('on Connect');
const srvUrl = url.parse(`https://${clientRequest.url}`);
console.log(clientRequest.url, srvUrl);
const srvSocket = net.connect(srvUrl.port, srvUrl.hostname, () => {
clientSocket.write('HTTP/' + clientRequest.httpVersion + ' 200 OK\r\n' +
'Connection: close\r\n' + '\r\n', 'UTF-8', () => {
srvSocket.pipe(clientSocket);
clientSocket.pipe(srvSocket);
})
});
srvSocket.on('error', e => {
console.log('srvSocket.on error: ', e);
});
clientSocket.on('error', e => {
console.log('clientSocket.on error: ', e);
});
});
const listener = proxyServer.listen(process.env.PORT || 3000, (err) => {
if (err) {
console.log('error starting server: ', err);
}
});
Выглядит как proxyServer.on('connect',... никогда не выполняется. Как и запросы http-прокси не доставляются в приложение (журналы пусты, отфильтрованы по обратному прокси-серверу в облаке Google)
Кто-нибудь знает решение создать прокси на движке приложения? (не имеет значения, какой язык использовать)
1 ответ
Я знаю, что Zeit.co, например, не позволяет размещать http прокси. Их обратный прокси просто отбросит все запросы, не передавая их в размещенную функцию. Вероятно, Google имеет такую же политику.