web-dev-qa-db-fra.com

Node http-proxy et express

J'essaie de faire quelque chose comme ça:

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

Auparavant, j'utilisais ceci:

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

En gros, je veux toujours utiliser express ... mais quand les gens vont à http://localhost/blog être redirigé vers le blog mais toujours diffusé sur port 8080 (qui sera finalement le port 80)

Je l'ai donc changé pour cela et cela a mieux fonctionné. Le problème est qu'express prend le relais du routage (d'après ce que je peux dire)

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

Utilisation de http-proxy 1.0 avec 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' });
});
38
Chandler

Une solution très simple qui fonctionne de manière transparente, ainsi qu'avec des cookies/authentification, en utilisant 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;
    }
});

Et puis simplement:

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

Je sais que je suis en retard pour rejoindre cette fête, mais j'espère que cela aide quelqu'un.

8
Selfish

Je l'ai fait fonctionner.

  • Installer Ghost et assurez-vous que sa propriété fonctionne (le port par défaut est 2368)
  • Créez votre application Web de nœud à l'aide d'Express (écoutez sur le port 80) - rien de spécial ici
  • Installer node-http-proxynpm install http-proxy dans votre application Web
  • Créer une route générique pour/blog * qui envoie des requêtes par procuration au service 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  
      });
    });
    
  • Mettez à jour la configuration Ghost pour utiliser un sous-répertoire (uniquement pris en charge dans la version 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',
    ...
    
  • Vous devriez maintenant pouvoir frapper http://votresite.com/blog et toutes les routes fonctionnent.

4
Michael Moser