cómo poner nodejs y apache en el mismo puerto 80

Tengo que poner nodejs en el puerto 80, pero Apache ya lo está usando. ¿Cómo puedo poner ambos (nodejs y apache) en el mismo puerto 80? Lo necesito porque en mi universidad todos los puertos están bloqueados, excepto el PUERTO 80. (Esta es una aplicación en tiempo real con nodejs y socket.io (websockets) y en el otro lado una aplicación php). Muchas gracias

Personalmente lo he hecho al revés desde @liammclennan. Algunos sugieren que las proxies a través de Apache anulan algunas de las ventajas de rendimiento y escalabilidad de Node (no tengo experiencia como mi servidor no recibe mucho tráfico, pero desde el enlace de @liammclennan: “Cada solicitud que llegue a través de Apache causará un subproceso de Apache para esperar / bloquear hasta que la respuesta sea devuelta desde su proceso Node.js. “ , que obviamente no encaja bien con la architecture de Node.)

Utilicé el nodo-http-proxy para configurar un servidor proxy de nodo aproximadamente como se describe en el primer enlace (mi proxy de nodo se ejecuta en el puerto 80; Apache y mis otros servicios de nodo no). Parece estar funcionando bien hasta ahora, aunque he tenido problemas ocasionales de estabilidad que he “resuelto” al comprobar que el proxy todavía se está ejecutando con un trabajo cron ( edición: parece mucho más estable en estos días). El proxy es bastante ligero, y ocupa unos 30 MB de memoria.

Hago esto a través del proxy node.js ..

Instale http-proxy con npm o página oficial

Ejemplo:

 var http = require('http'), httpProxy = require('http-proxy'), proxyServer = httpProxy.createServer ({ hostnameOnly: true, router: { 'domain.com': '127.0.0.1:81', 'domain.co.uk': '127.0.0.1:82', '127.0.0.1': '127.0.0.1:83' } }); proxyServer.listen(80); 

Esto crea un proceso de nodo que escucha el puerto 80 y reenvía las solicitudes de dominios que van a: 81,82,83, etc. Recomiendo que se ejecute forever y se agregue una entrada a init.d para que su proxy esté activo en caso de que el sistema se apague .

También puede usar mod_proxy y mod_proxy_http de Apache 2, que pueden ser más confiables o tener un mejor rendimiento según su sistema.

Aquí hay un ejemplo:

 # Use Apache for requests to http://example.com/ # but use Node.js for requests to http://example.com/node/  ServerName example.com DocumentRoot /var/www/example/  ProxyPass http://127.0.0.1:8124/ ProxyPassReverse http://127.0.0.1:8124/   

Y, por supuesto, puede modificar las directivas según sus necesidades, como usar un puerto diferente para su host virtual (por ejemplo, 443), un puerto diferente para Node.js o configurar el proxy bajo un bloque diferente, como para un subdominio (por ejemplo, node.example.com).

Usted no puede Debe ejecutar node.js en otro puerto y luego enviar las solicitudes a través de apache. Puedes hacerlo usando mod_proxy

http://davybrion.com/blog/2012/01/hosting-a-node-js-site-through-apache/

Por lo general, uso haproxy como front-end en situaciones como esa y tengo ese proxy en el servidor backend apropiado. (Aunque hacer que su node.js procese un servidor proxy también es un enfoque válido dependiendo de sus necesidades).

Encontré una idea genial. Ejecute apache y nodejs en el puerto 80 . No lo probé todavía pero lo haré por supuesto.

Paso 1

Obtenga un VPS que ofrezca 2 o más direcciones IP.

Paso 2

Desde WHM cPanel, busque el elemento de menú Service Configuration , seleccione Apache Configuration y luego haga clic en Reserved IPs Editor .

Paso 3

Marque la dirección IP que NO QUIERE que Apache escuche, y escríbala para poder usarla en el siguiente paso. Haga clic en Save .

Etapa 4

Instala Node.js, y crea un servidor como este:

 var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); res.end('Hello, world!'); }); server.listen(80, '111.111.111.111'); 

Reemplace 111.111.111.111 con la dirección IP que reservó anteriormente desde el panel de WHM.

Paso 5

Deja de perder tu tiempo y nunca escuches a los que te dicen que uses mod_rewrite para proxy Node.js de nuevo.

Actualizar:

Podemos resolver un problema de muchas maneras diferentes y, en mi humilde opinión, al menos deberíamos saber cada forma posible 😉. Podemos hacerlo sin comprar una nueva IP, por supuesto, colocando un proxy frente a los servidores Apache y NodeJS, cada uno con otros puertos excepto 80.