¿Cómo ejecuto Node.js en el puerto 80?

Mi objective es ejecutar Node.js en el puerto 80. Esto se debe a que estoy descubriendo que node.js se está bloqueando desde ciertas redes que no permiten el tráfico desde ningún otro puerto.

Parece que la mejor manera de hacerlo es mediante proxy de Apache a través de Node.js. He intentado usar node-http-proxy para hacer esto, pero no he tenido suerte.

El código que estoy usando está aquí:

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

Pero sigo recibiendo el error “Dirección en uso” para el puerto 80. Debo estar haciendo algo mal.

¿Cómo puedo proxy de Apache a través de node.js usando node-http-proxy? ¿Esto me permitirá ejecutar node.js en el puerto 80? Y es node-http-proxy la mejor manera de lograr esto?

Gracias.

Lo que necesita hacer es tener 2 ip’s para el servidor que está ejecutando. Apache tiene 1 ip vinculada al puerto 80 y luego node.js tiene la otra ip vinculada al puerto 80.

El uso del nodo y su directiva de escucha tiene 2 valores, por ejemplo. .listen (80, NODEJS_IP o DNS NAME);

Algún otro consejo.

No usaría apache con nodejs ya que no tiene valor. Entonces esto realmente no es recomendado. Realmente consideraría usar NGINX ya que es una combinación mucho mejor con Node.

ejecuta tu aplicación en un puerto alto 8080 o Whatev entonces

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

Si no estás usando ngnix o apache

La solución más simple: configure de manera segura su aplicación de nodo para que se ejecute en el puerto 80 .

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service=+ep /path/to/node
  • Ta da! Ya terminaste

¿Por qué me gusta?

  • No tiene que usar apache o nginx
  • No tiene que ejecutar su aplicación como root
  • No tendrá que reenviar puertos (y manejarlos cada vez que arranque la máquina)

Enlace de referencia: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps (Un gran artículo sobre cómo configurar su aplicación de nodo en el alojamiento en la nube).

Actualmente no se recomienda ejecutar el nodo en el puerto 80, ya que eso requiere ejecutar el nodo como raíz.

¿Qué tan apegado estás a apache? El nodo Proxying a través de nginx es una solución probada y verdadera, con una configuración nginx como esta:

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

Documentación de Nginx:

http://wiki.nginx.org/HttpProxyModule

http://wiki.nginx.org/HttpUpstreamModule

Su código parece un código de ejemplo en el que está creando un proxy basado en nodo desde el puerto 80 al puerto 9000, y luego crea un servidor HTTP basado en nodo en el puerto 9000. (es decir, Node:80 -> Node:9000 )

Obtendrá “dirección en uso” cuando ejecute Nodo porque Apache ya está usando el puerto 80. Si desea usar Apache como proxy, debe usar Node en un puerto diferente (digamos 9000) y tener Apache escuchando en el puerto 80 y reenviando las solicitudes al Nodo en el puerto 9000. (es decir, Apache:80 -> Node:9000 )

Parece que la biblioteca que está utilizando es para hacer lo contrario: usar Node como proxy y reenviar las solicitudes a Apache. En este caso, debe configurar Apache para que se ejecute en otro puerto que no sea el puerto 80. (es decir, Node:80 -> Apache:9000 ).

¿Quieres hacer Node:80 -> Apache:9000 o Apache:9000 -> Node:80 , al final?

EDITAR después de los comentarios: si quieres hacer Apache:80 -> Node:9000 , puedes usar mod_proxy en Apache y usar las directivas ProxyPass / ProxyPassReverse , algo así como

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

donde nodeurls es la familia de URL que desea que Apache reenvíe a Node.

Estaba teniendo el mismo problema, así es como lo resolví usando node-http-proxy para escuchar en el puerto 80, luego reenviar a express o apache.

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

si solo desarrollas el modo de entorno

puedes su root , luego

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