¿En qué puertos debería node.js escuchar? ¿Como y por qué?

Mis aplicaciones node.js que escucho en el puerto 80 para http y 443 para https, lo cual creo que era una práctica bastante estándar.

Sin embargo, una serie de ejemplos que he leído recientemente usan otros puertos (por ejemplo, 8080 y 8081) para escuchar http / https, y luego usan otros medios como las reglas de iptables o ufw para servir a los puertos 80/443 a través de redireccionar paquetes a / desde otros .

Vea dos ejemplos aquí y aquí .

Entonces mi pregunta es ¿por qué no querría escuchar directamente a los puertos 80 y 443?

¿Hay problemas de seguridad a la mano? ¿Es simplemente un caso de estos autores que no tienen permisos para escuchar en puertos inferiores a 1024 (esto me sorprendería)? ¿La mayoría de la gente ejecuta Apache a lo largo del nodo lateral? (Yo no).

Suponiendo que hay una buena razón por la que no quiero escuchar directamente a 80 y / o 443, ¿ qué método debería usar para retransmitir el tráfico de 80/433 a mis puertos alternativos de elección?

He mencionado iptables y ufw arriba, ¿es uno de estos mejores que los otros, o hay algún otro método que deba usar? ¿La respuesta depende de si estoy equilibrando mi carga entre procesos?

Gracias por adelantado.

La primera línea del primer artículo al que se vincula menciona la razón.

 Standard practices say no non-root process gets to talk to the Internet on a port less than 1024. 

Para que el nodo se enlace al puerto 80 o 443 , debe ejecutarlo como root, lo cual no es una buena idea.

El método que utilice para redireccionar el tráfico a los puertos superiores depende de usted. Las iptables son las que requieren menos recursos y son las más sencillas. Otro método sería usar NginX / Apache para hacer proxy al nodo. Yo diría que el principal beneficio de ese método es que también puede servir cosas como archivos estáticos desde allí y no tener que servirlos a través de Node.

Apache y NginX están diseñados explícitamente para ser muy buenos en el servicio de archivos estáticos, por lo que son extremadamente buenos, mientras que Node es un entorno JS completo, con toda la sobrecarga que esto implica. Node es excelente para administrar muchas conexiones simultáneas y ciertamente puede servir archivos perfectamente bien para cargas normales, pero utilizará más recursos que NginX para hacerlo.

El uso de un proxy compatible con HTTP como Apache / NginX también significa que puede configurar varias instancias de Nodo para ejecutar diferentes subdominios, o incluso diferentes rutas en el mismo dominio.