javascript - Forward every request with node-http-proxy -


i'm trying setup node-http-proxy forwards requests. in end proxy should inject javascript in every website visit through browser..

right now, pages forwarded , displayed correctly, some, posterkoenig.ch or verkehrsclub.ch returning either blank page or there error on page. both sites work without proxy in place. have change, or missing gets not forwarded correctly?

im new nodejs , not sure if approach should work or not.

here i've got far:

var httpproxy = require('http-proxy'); var url = require('url');  httpproxy.createserver(function(req, res, proxy) {    var urlobj = url.parse(req.url);    proxy.proxyrequest(req, res, {     host: urlobj.host,     port: 80,     changeorigin: true,     enable : { xforward: true }   }); }).listen(9000, function () {   console.log("waiting requests..."); }); 

update

as suggested @robertklep removed changeorigin , redefined req.headers.host , req.headers.url

posterkoenig.ch: throws: an error has occurred: {"code":"enotfound","errno":"enotfound","syscall":"getaddrinfo"}

verkehrsclub.ch: frontpage works subpages still throw error on page.

var httpproxy = require('http-proxy'); var url = require('url');  httpproxy.createserver(function(req, res, proxy) {    var urlobj = url.parse(req.url);    req.headers['host'] = urlobj.host;   req.headers['url'] = urlobj.href;    proxy.proxyrequest(req, res, {     host: urlobj.host,     port: 80,     enable : { xforward: true }   }); }).listen(9000, function () {   console.log("waiting requests..."); }); 

your first problem related changeorigin: send host header remote server includes port number, , both sites mention can't handle that.

instead, try this:

req.headers.host = urlobj.host; req.url          = urlobj.path; proxy.proxyrequest(req, res, {   host: urlobj.host,   port: 80,   enable : { xforward: true } }); 

as other problem, think might related websites don't serve content utf-8 (which encoding .tostring() use if don't pass encoding). happen always, or sites?

fwiw, harmon middleware node-http-proxy provides nice way of rewriting responses. might overkill situation, might solve problem.

edit: here's minimal example seems work fine both posterkoenig.ch , www.verkehrsclub.ch (homepages subpages):

var httpproxy = require('http-proxy'); var url       = require('url');  httpproxy.createserver(function(req, res, proxy) {   var urlobj = url.parse(req.url);    req.headers.host  = urlobj.host;   req.url           = urlobj.path;    proxy.proxyrequest(req, res, {     host    : urlobj.host,     port    : 80,     enable  : { xforward: true }   }); }).listen(9000, function () {   console.log("waiting requests..."); }); 

Comments