78 votes

Comment puis-je faire fonctionner Node.js sur le port 80?

Mon objectif est de courir Node.js sur le port 80. C'est parce que je viens de trouver node.js il est bloqué à partir de certains réseaux ne permettent pas la circulation à partir de n'importe quel autre port.

Il semble que la meilleure façon de le faire est par le proxy d'Apache par Node.js. J'ai essayé d'utiliser le nœud de-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 reçois le message d'erreur "Adresse" pour le port 80. Je dois être en train de faire quelque chose de mal.

Comment puis-je proxy Apache par node.js l'aide d'un noeud-http-proxy? Sera-ce de me permettre de l'exécuter node.js sur le port 80? Et nœud-http-proxy le meilleur moyen d'y parvenir?

Je vous remercie.

127voto

dryprogrammers Points 913

exécutez votre application sur un haut le port 8080 ou whatev alors

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

Si vous n'êtes pas à l'aide de ngnix ou apache

31voto

PaulM Points 1940

Ce que vous devez faire est d'avoir 2 ip pour le serveur que vous exécutez. Apache a 1 ip vers le port 80, puis node.js a l'autre ip vers le port 80.

L'aide d'un noeud et de sa directive listen a 2 valeurs, par exemple. .écouter(80, NODEJS_IP ou le NOM DNS);

Quelques autres conseils.

Je ne voudrais pas utiliser apache avec nodejs que ce n'est pas evented. Donc, ce n'est vraiment pas recommandé. En fait, je peux regarder dans l'aide de NGINX comme un bien meilleur couplage avec le Noeud.

19voto

Waquo Points 780

Il n'est actuellement pas recommandé d'exécuter un nœud sur le port 80, en tant que nécessite l'exécution de nœud en tant que root.

Quel est l'attachement que vous apache? L'utilisation de proxy nœud via nginx est une essayé et vrai solution, avec un nginx-config comme ceci:

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

9voto

nicolaskruchten Points 6130

Votre code ressemble à un exemple de code dans lequel vous êtes en train de créer un Nœud à base de proxy à partir du port 80 vers le port 9000, puis la création d'un Nœud à base de serveur HTTP sur le port 9000. (c - Node:80 -> Node:9000)

Vous obtenez "adresse" lorsque vous lancez Nœud, car Apache utilise déjà le port 80. Si vous souhaitez utiliser Apache proxy, vous devez utiliser un Nœud sur un port différent (dis 9000) et Apache écoute sur le port 80 et l'acheminement des demandes de Nœud sur le port 9000. (c - Apache:80 -> Node:9000)

Il ressemble à la bibliothèque que vous utilisez pour faire le contraire: à l'aide d'un Noeud comme le proxy et la transmission de la demande à Apache. Dans ce cas, vous devez configurer Apache pour fonctionner sur un autre port que le port 80. (c - Node:80 -> Apache:9000).

Êtes-vous le désir de faire les Node:80 -> Apache:9000 ou Apache:9000 -> Node:80, à la fin?

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

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

nodeurls est la famille des Url que vous souhaitez pour Apache à l'avant de Nœud.

3voto

uglymunky Points 1594

J'ai eu le même problème, voici comment j'ai résolu l'aide d'un noeud-http-proxy pour écouter sur le port 80, puis vers l'avant pour qu'elle soit expresse ou apache.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X