Difficile eseguire contemporaneamente un server Apache e un'applicazione node.js. Ma non è difficile da fare con un proxy inverso. Facciamolo in modo semplice utilizzando la tecnica del proxy inverso per rendere un server Apache in grado di eseguire l'applicazione node.js su qualsiasi URL sul server Apache.
Cos'è Node.js?
Node.js è un ambiente runtime JavaScript open source e multipiattaforma che esegue il codice JavaScript all'esterno di un browser Web che è una piattaforma lato server. Il server Node.js rende la tua applicazione disponibile per servire le richieste HTTP/HTTPS. Normalmente in Windows, Node.js funziona su porte 80 e 3000 ma può essere modificato come preferisci.
Cos'è il server Apache?
Apache Server è un software server Web open source e gratuito. Non è un server fisico, ma piuttosto un software che gira su un server. Apache è un software multipiattaforma, quindi funziona su server Unix, Linux e Windows. Il server Apache e il client comunicano tramite il protocollo HTTP ed è responsabile della comunicazione fluida e sicura tra due macchine.
Perché non possiamo eseguire sia node.js che il server Apache per ascoltare la stessa porta?
Perché questi due comunicano tramite i protocolli HTTP e ciascun server ha porte diverse da eseguire. Poiché solo un processo può essere in ascolto su una determinata porta, entrambi non possono essere eseguiti direttamente sulla stessa porta. Quindi, dovrai spedire in qualche modo. Una soluzione semplice è eseguirli entrambi insieme ed eseguire il server node.js e il server Apache utilizzando la tecnica del proxy inverso.
Cos'è la tecnica del Reverse Proxy?
Un proxy inverso è un server che si trova di fronte ai server Web e inoltra le richieste dei client a tali server Web. Un server proxy inverso è un tipo di server proxy che in genere si trova dietro il firewall in una rete privata e indirizza le richieste del client al server backend appropriato. Un proxy inverso fornisce un ulteriore livello di astrazione e controllo per garantire il flusso regolare del traffico di rete tra client e server.
Quindi come utilizzare la tecnica del proxy inverso per risolvere il nostro problema.
Poiché non possiamo eseguire sia il server node.js che il server Apache in ascolto sulla stessa porta, dobbiamo configurare Apache in modo che agisca come un proxy inverso e passare la richiesta all'applicazione node.js per un URL specifico.
Ad esempio, se hai il server Apache in esecuzione su localhost e desideri eseguire l'applicazione node.js su localhost/node. Questo appare come segue.
La soluzione
Per prima cosa avviamo una semplice applicazione del nodo in ascolto sulla porta 3000. Ecco una semplice applicazione che ascolta le richieste HTTP e restituisce un semplice testo "Hello World".
Ora esegui il file app.js per avviare il server e potrai vederlo sul browser se accedi alla porta localhost 3000 (localhost:3000) come segue.
Successivamente, vai su xampp apache config e vai al file "Apache (httpd.conf)". Dobbiamo fare in modo che Apache reindirizzi la richiesta utilizzando ProxyPass e aggiungi "ProxyPass / nodo http://localhost:3000/" al file come segue.
Puoi modificare "/node" in qualsiasi URL che desideri servire all'applicazione del nodo. Inoltre, puoi modificare "http://localhost:3000/" in base alla porta del tuo nodo.
Quindi, assicurati di aver abilitato i moduli "mod_proxy" e "mod_proxy_http" rimuovendo il commento.
Successivamente, salva il file di configurazione e riavvia il server Apache. Quindi andiamo a "localhost/node" e puoi vedere node.js in esecuzione sullo stesso server Apache.
Oh ! Funziona! 🙂
Ecco come utilizzare la tecnica del proxy inverso per rendere un server Apache in grado di eseguire l'applicazione node.js sullo stesso server.
Questo approccio è adatto per un ruolo specifico con un numero limitato di utenti. Ma se vuoi avere prestazioni e scalabilità, devi eseguire il server Apache e il server node.js separatamente.