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'' });
});