Comment faire fonctionner le noeud.js sur le port 80?

mon but est d'exécuter le noeud.js sur le port 80. C'est parce que je viens de trouver du nœud.js est bloqué par certains réseaux qui ne permettent pas le trafic depuis un autre port.

il semble que la meilleure façon de faire ceci est de proxy Apache à travers le noeud.js. J'ai essayé d'utiliser nœud-http-proxy pour ce faire, mais je n'ai pas eu de chance.

le code que j'utilise est ici:

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

httpProxy.createServer(9000, 'localhost').listen(80);

http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied to: ' + req.url + 'n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

mais je garde reçois l'erreur "Adresse" pour le port 80. Je dois être en train de faire quelque chose de mal.

Comment puis-je proxy Apache à travers un noeud.js utilisant node-http-proxy? Ceci me permettra-t-il d'exécuter le noeud?js sur le port 80? Et nœud-http-proxy le meilleur moyen d'y parvenir?

Merci.

64
demandé sur Kit 2011-05-24 14:31:17

7 réponses

Ce que vous devez faire est d'avoir 2 ip pour le serveur que vous exécutez. Apache a une ip liée au port 80 puis au noeud.js a l'Autre ip liée au port 80.

utilisant le noeud et sa directive listen a 2 valeurs eg. .listen (80, NODEJS_IP or DNS NAME);

autre conseil.

Je ne voudrais pas utiliser apache avec nodejs car il n'est pas Pair. Donc, ce n'est vraiment pas recommandé. Je voudrais en fait regarder dans l'utilisation de NGINX comme son a bien meilleur appariement avec le noeud.

29
répondu PaulM 2011-05-24 10:40:17

lancez votre application sur un port 8080 ou whatev puis

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

si vous n' utilisez pas ngnix ou apache""

97
répondu fullstacklife 2011-07-27 17:49:07

la solution la plus simple: configurer en toute sécurité votre application node pour qu'elle tourne sur le port 80 .

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service=+ep /path/to/node
  • Ta da! Vous avez terminé.

pourquoi j'aime ça?

  • Vous n'avez pas à utiliser apache ou nginx
  • Vous n'avez pas à exécuter votre application en tant que root
  • Vous n'aurez pas doivent transmettre les ports (et gérer cela chaque fois que votre machine démarre)

lien de référence: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps (un excellent article sur la façon de configurer votre application node sur l'hébergement cloud).

26
répondu Kyle Chadha 2016-02-26 21:41:20

il n'est actuellement pas recommandé d'exécuter node sur le port 80, car cela nécessite l'exécution node comme root.

à quel point êtes-vous attaché à apache? Proxying node à travers nginx est une solution éprouvée et vraie, avec un NGINX-config tel que celui-ci:

upstream node_cluster {
    ip_hash;   
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

server {
    listen 0.0.0.0:80;
    server_name foo;
    access_log /var/log/nginx/foo.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;

      proxy_pass http://node_cluster/;
      proxy_redirect off;
    }
}

NGINX documentation:

http://wiki.nginx.org/HttpProxyModule

http://wiki.nginx.org/HttpUpstreamModule

18
répondu Waquo 2011-05-24 11:48:22

votre code ressemble à un exemple de code dans lequel vous créez un proxy basé sur un noeud du port 80 au port 9000, puis créez un serveur HTTP basé sur un noeud sur le port 9000. (c'est à dire Node:80 -> Node:9000 )

Vous "adresse" lorsque vous lancez Nœud, car Apache utilise déjà le port 80. Si vous voulez utiliser Apache pour proxy, vous devez utiliser Node sur un port différent (disons 9000) et avoir Apache à l'écoute sur le port 80 et transmettre les requêtes à Node sur le port 9000. (c'est à dire Apache:80 -> Node:9000 )

on dirait que la bibliothèque que vous utilisez est pour faire le contraire: utiliser le noeud comme proxy et transmettre les requêtes à Apache. Dans ce cas, vous devez configurer Apache pour qu'il tourne sur un autre port que le port 80. (c'est à dire Node:80 -> Apache:9000 ).

voulez-vous faire Node:80 -> Apache:9000 ou Apache:9000 -> Node:80 , à la fin?

modifier après les commentaires: Si vous voulez faire Apache:80 -> Node:9000 , vous pouvez utiliser mod_proxy sur Apache et l'utilisation les directives ProxyPass / ProxyPassReverse , quelque chose comme

ProxyPass /nodeurls/ http://localhost:9000/
ProxyPassReverse /nodeurls/ http://localhost:9000/  

nodeurls est la famille D'URLs qu'Apache souhaite transmettre au noeud.

8
répondu nicolaskruchten 2011-05-24 12:27:48

j'avais le même problème, Voici comment je l'ai résolu en utilisant node-http-proxy pour écouter sur le port 80, puis transmettre à express ou apache.

https://stackoverflow.com/a/9645091/500270

3
répondu uglymunky 2017-05-23 12:17:42

si vous venez de vous développer dans un environnement en mode

vous pouvez su root , puis

node index.js ou ./node_modules/coffee-script/bin/coffee index.coffee

-2
répondu jiahut 2016-04-15 03:32:46