2013-04-04 14 views
6

Oto wersja moduł, który używam:Jak korzystać z protokołu node-http-proxy dla routingu HTTP do HTTPS?

$ npm list -g | grep proxy 
├─┬ [email protected] 

usługa nazywa się moim komputerze i moim zadaniem jest pełnomocnika wniosek do innego adresu URL i gospodarz z dodatkowym parametrem zapytania w oparciu o treść ciało na życzenie:

var http  = require('http'), 
    httpProxy = require('http-proxy') 
    form2json = require('form2json'); 

httpProxy.createServer(function (req, res, proxy) { 
    // my custom logic 
    var fullBody = ''; 
    req.on('data', function(chunk) { 
     // append the current chunk of data to the fullBody variable 
     fullBody += chunk.toString(); 
    }); 
    req.on('end', function() { 
     var jsonBody = form2json.decode(fullBody); 
     var payload = JSON.parse(jsonBody.payload); 
     req.url = '/my_couch_db/_design/ddoc_name/_update/my_handler?id="' + payload.id + '"'; 

     // standard proxy stuff 
     proxy.proxyRequest(req, res, { 
     changeOrigin: true, 
     host: 'my.cloudant.com', 
     port: 443, 
     https: true 
     }); 
    }); 
}).listen(8080); 

Ale biec do błędów, takich jak: An error has occurred: {"code":"ECONNRESET"}

ktoś ma pomysł, co trzeba naprawić tutaj?

Odpowiedz

6

To załatwiło sprawę dla mnie:

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

var options = { 
    changeOrigin: true, 
    target: { 
     https: true 
    } 
} 

httpProxy.createServer(443, 'www.google.com', options).listen(8001); 
+1

Dziękuję Aarona, który jest pierwszym przydatna Dostałem odpowiedź na ten temat od dłuższego czasu i taki, który rzeczywiście działa! – pulkitsinghal

2

Aby przekazać wszystkie żądania, które wchodzą w port 3000 do https://google.com:

const https = require('https') 
const httpProxy = require('http-proxy') 

httpProxy.createProxyServer({ 
    target: 'https://google.com', 
    agent: https.globalAgent, 
    headers: { 
    host: 'google.com' 
    } 
}).listen(3000) 

Przykład inspirowany https://github.com/nodejitsu/node-http-proxy/blob/master/examples/http/proxy-http-to-https.js.

+0

dziękuję, wiele się zmieniło od kwietnia 4 1013 – pulkitsinghal

+1

Tak, dlatego opublikowałem zaktualizowaną odpowiedź. –

0

Po pewnym prób i błędów, to pracował dla mnie:

var fs = require('fs') 
var httpProxy = require('http-proxy'); 
var https = require('https'); 

var KEY = 'newfile.key.pem'; 
var CERT = 'newfile.crt.pem'; 

httpProxy.createServer({ 
    changeOrigin: true, 
    target: 'https://example.com', 
    agent: new https.Agent({ 
    port: 443, 
    key: fs.readFileSync(KEY), 
    cert: fs.readFileSync(CERT) 
    }) 
}).listen(8080); 
Powiązane problemy