it-swarm.com.de

wie man nodejs und Apache in denselben Port 80 setzt

Ich muss nodejs in Port 80 setzen, aber Apache verwendet es bereits. Wie kann ich beide (nodejs und Apache) auf denselben Port 80 setzen? Ich brauche es, weil in meiner Universität alle Ports mit Ausnahme von PORT 80 blockiert sind

21
user1203334

Ich habe das andersherum von @liammclennan gemacht. Einige vermuten dass das Proxying durch Apache einige der Vorteile von Node in Bezug auf Leistung und Skalierbarkeit zunichte macht (ich habe selbst keine Erfahrung, da mein Server nicht so viel Verkehr bekommt, sondern von @ liammclennans Link: "Jede Anfrage Wenn Sie über Apache eingehen, wird ein Apache-Thread gewartet/blockiert, bis die Antwort von Ihrem Node.js-Prozess zurückgegeben wird. ", was offensichtlich nicht gut in die Architektur von Node passt.)

Ich habe node-http-proxy verwendet, um einen Node-Proxy-Server grob einzurichten, wie im ersten Link beschrieben (mein Node-Proxy wird auf Port 80 ausgeführt; Apache und meine anderen Node-Services nicht). Scheint bisher gut zu funktionieren, obwohl ich gelegentlich Stabilitätsprobleme hatte, die ich "gelöst" habe, indem überprüft wurde, ob der Proxys noch mit einem Cron-Job läuft (edit: es scheint heutzutage viel stabiler). Der Stellvertreter ist ziemlich leicht und nimmt etwa 30 MB Speicherplatz in Anspruch. 

9
meloncholy

Ich mache das über node.js Proxy ..

Installieren Sie http-proxy mit npm oder offizielle Seite

Beispiel:

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

Dadurch wird ein Knotenprozess erstellt, der Port 80 überwacht und Anforderungen für Domänen weiterleitet, die folgende Adressen enthalten: 81,82,83 usw. Ich empfehle, diesen Befehl mit forever auszuführen und einen Eintrag zu init.d hinzuzufügen, damit Ihr Proxy aktiv ist, falls das System heruntergefahren wird.

22
code ninja

Sie können auch mod_proxy und mod_proxy_http von Apache 2 verwenden, die je nach System zuverlässiger sind oder eine bessere Leistung bieten.

Hier ist ein Beispiel:

# 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>

Natürlich können Sie die Anweisungen an Ihre Anforderungen anpassen, z. B. einen anderen Port für Ihren virtuellen Host (z. B. 443), einen anderen Port für Node.js, oder den Proxy unter einem anderen Block einrichten, z. B. für eine Unterdomäne (z. B. node.example.com).

7
Synexis

Du kannst nicht Sie müssen node.js auf einem anderen Port ausführen und dann über Apache Proxy-Anforderungen ausführen. Sie können dies mit mod_proxy tun 

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

1
liammclennan

Normalerweise verwende ich haproxy als Frontend in solchen Situationen und habe diesen Proxy auf dem entsprechenden Backend-Server. (Obwohl Sie mit node.js einen Proxy-Server verarbeiten, ist dies je nach Ihren Anforderungen auch ein gültiger Ansatz.).

0