прокси узла с http на https

Я хотел бы знать, как проще всего настроить прокси-сервер, где я могу отправлять HTTP-запросы в (т.е.) localhost:8011, а прокси-сервер делает HTTPS-запрос в localhost:443 (ответ HTTPS с сервера также должен быть переведен в HTTP прокси-сервером). )

Я использую node.js

Я пробовал http-proxy вот так:

var httpProxy = require('http-proxy');
var options = {
  changeOrigin: true,
  target: {
      https: true
  }
}

httpProxy.createServer(443, 'localhost', options).listen(8011);

Я также пробовал это:

httpProxy.createProxyServer({   
    target: {
        host:'https://development.beigebracht.com',
        rejectUnauthorized: false,
        https: true,   
    } 
}).listen(port);

Но когда я пытаюсь подключиться, я получаю эту ошибку

/Users/adrian/Development/beigebracht-v2/app/webroot/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js:103
    var proxyReq = (options.target.protocol === 'https:' ? https : http).reque
                                  ^
TypeError: Cannot read property 'protocol' of undefined

Я хотел бы сделать это с узлом, но другие решения могут быть действительными. (Прокси будет использоваться на локальном хосте только в целях тестирования, поэтому безопасность не является проблемой)


person Freefri    schedule 03.02.2014    source источник
comment
Сам сейчас в этом процессе. Вы уверены, что цель является объектом? Кажется, это должна быть просто строка URL?   -  person Spork    schedule 06.02.2014


Ответы (1)


Мне нужен прокси-сервер узла HTTP-> HTTPS для модульного тестирования. В итоге я создал прокси-сервер HTTP, а затем заставил его прослушивать и обрабатывать событие connect. Когда сервер получает запрос CONNECT, он устанавливает туннель к целевому URL-адресу HTTPS и перенаправляет все пакеты из клиентского сокета в целевой сокет и наоборот.

Образец кода:

var httpProxy = require('http-proxy');
var net = require('net');
var url = require('url');

var options = {
    host: 'localhost',
    port: 3002
};

var proxy = httpProxy.createProxyServer();

proxy.http = http.createServer(function(req, res) {

    var target = url.parse(req.url);

    // The `path` attribute would cause problems later.
    target.path = undefined;

    proxy.web(req, res, {
        target: target
    });

}).listen(options.port, options.host);

// This allows the HTTP proxy server to handle CONNECT requests.
proxy.http.on('connect', function connectTunnel(req, cltSocket, head) {

    // Bind local address of proxy server.
    var srvSocket = new net.Socket({
        handle: net._createServerHandle(options.host)
    });

    // Connect to an origin server.
    var srvUrl = url.parse('http://' + req.url);

    srvSocket.connect(srvUrl.port, srvUrl.hostname, function() {
        cltSocket.write(
            'HTTP/1.1 200 Connection Established\r\n' +
            'Proxy-agent: Node.js-Proxy\r\n' +
            '\r\n'
        );
        srvSocket.write(head);
        srvSocket.pipe(cltSocket);
        cltSocket.pipe(srvSocket);
    });
});
person c.hill    schedule 09.12.2015