web-dev-qa-db-fra.com

comment mettre nodejs et Apache dans le même port 80

Je dois mettre nodejs sur le port 80, mais Apache l'utilise déjà. Comment puis-je mettre les deux (nodejs et Apache) sur le même port 80? J'en ai besoin car dans mon université, tous les ports sont bloqués sauf PORT 80. (C'est une application en temps réel avec nodejs et socket.io (websockets) et de l'autre côté une application php) . Merci beaucoup

21
user1203334

Je l'ai personnellement fait à l'inverse de @liammclennan. Certains suggèrent que le proxy par Apache annule certains avantages en termes de performances et d'évolutivité de Node (je n'ai pas l'expérience moi-même car mon serveur ne génère pas beaucoup de trafic, mais de @ lien de liammclennan: "Chaque demande qui arrive via Apache fera attendre/bloquer un thread Apache jusqu'à ce que la réponse soit renvoyée par votre processus Node.js." t maille bien avec l’architecture de Node.)

J'ai utilisé node-http-proxy pour configurer un serveur proxy Node comme décrit dans le premier lien (mon proxy Node s'exécute sur le port 80; Apache et mes autres services Node ne le font pas). Cela semble bien fonctionner jusqu’à présent, même si j’ai eu parfois des problèmes de stabilité que j’ai "résolus" en vérifiant que le proxy est toujours en cours d’exécution avec un travail cron ( edit: il semble beaucoup plus stable ces jours-ci). Le proxy est assez léger, prenant environ 30 Mo de mémoire.

9
meloncholy

Je le fais via un proxy node.js ..

Installez http-proxy avec npm ou page officielle

Exemple:

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

Cela crée un processus de noeud écoutant le port 80 et transmettant les demandes de domaines qui vont à: 81,82,83 etc. Je recommande d'exécuter ceci avec forever et d'ajouter une entrée à init.d pour que votre proxy soit activé au cas où le système s'arrête.

22
code ninja

Vous pouvez également utiliser les méthodes mod_proxy et mod_proxy_http d'Apache 2, qui peuvent être plus fiables ou plus performantes en fonction de votre système.

Voici un exemple:

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

Et bien sûr, vous pouvez modifier les directives selon vos besoins, par exemple en utilisant un port différent pour votre hôte virtuel (par exemple, 443), un port différent pour Node.js ou en configurant le proxy sous un autre bloc, par exemple pour un sous-domaine. (par exemple, node.example.com).

7
Synexis

Tu ne peux pas. Vous devez exécuter node.js sur un autre port, puis des requêtes de proxy via Apache. Vous pouvez le faire en utilisant mod_proxy 

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

1
liammclennan

J'utilise habituellement haproxy en tant que serveur frontal dans des situations comme celle-ci et que ce proxy est envoyé au serveur principal approprié. (Bien que faire en sorte que votre processus node.js soit un serveur proxy est une approche valide aussi selon vos besoins).

0
Ask Bjørn Hansen