node.js express node-http-proxy

node.js - Nodo http-proxy y express



node-http-proxy (3)

Tengo este trabajo

  • Instala Ghost y asegúrate de que funcione correctamente (el puerto predeterminado es 2368)
  • Cree la aplicación web de su nodo usando Express (escuche en el puerto 80) - nada especial aquí
  • Instale node-http-proxy npm install http-proxy en su aplicación web
  • Cree una ruta comodín para / blog * que proxies solicite al servicio Ghost

    var httpProxy = require(''http-proxy''); var proxy = new httpProxy.RoutingProxy(); app.get(''/blog*'', function (req, res, next) { proxy.proxyRequest(req, res ,{ host: ''moserlap.splitvr.com'', port: 2368 }); });

  • Actualice la configuración de Ghost para usar un subdirectorio (solo se admite en 0.4.0+)

    config = { // ### Development **(default)** development: { // The url to use when providing links to the site, E.g. in RSS and email. url: ''http://127.0.0.1/blog'', ...

  • Ahora debería poder acceder a http://yoursite.com/blog y todas las rutas funcionan.

Estoy tratando de hacer algo como esto:

// Setup prox to handle blog requests httpProxy.createServer({ hostnameOnly: true, router: { ''http://localhost'': ''8080'', ''http://localhost/blog'': ''2368'' } }).listen(8000);

Anteriormente estaba usando esto:

http.createServer(app).listen(app.get(''port''), function(){ console.log("Express server listening on port " + app.get(''port'')); });

Básicamente, quiero usar Express ... pero, cuando las personas visitan http://localhost/blog son llevadas al blog, pero aún así se envía a través del port 8080 (que finalmente será el puerto 80)

Así que lo cambié a esto y funcionó mejor. El problema es que Express se hace cargo del enrutamiento (por lo que puedo decir)

var options = { // pathnameOnly: true, router: { ''localhost'': ''localhost:8080'', ''localhost/blog'': ''localhost:2368'' } } // Setup prox to handle blog requests var proxyServer = httpProxy.createServer(options); proxyServer.listen(9000); require(''./app/server/router'')(app); http.createServer(app).listen(app.get(''port''), function(){ console.log("Express server listening on port " + app.get(''port'')); });


Una solución muy sencilla que funciona a la perfección, y también con cookies / autenticación, utilizando express-http-proxy :

var proxy = require(''express-http-proxy''); var blogProxy = proxy(''localhost/blog:2368'', { forwardPath: function (req, res) { return require(''url'').parse(req.url).path; } });

Y luego simplemente:

app.use("/blog/*", blogProxy);

Sé que llego tarde a esta fiesta, pero espero que esto ayude a alguien.


Utilizando http-proxy 1.0 con express:

var httpProxy = require(''http-proxy''); var apiProxy = httpProxy.createProxyServer(); app.get("/api/*", function(req, res){ apiProxy.web(req, res, { target: ''http://google.com:80'' }); });