PHP et NodeJS sur le même serveur avec Apache ProxyPass

PHP et NodeJS sur le même serveur avec Apache ProxyPass

Il existe de nombreux sites et applications web en PHP mis en place qui fonctionnent sur Apache. Beaucoup de gens utilisent Apache de sorte qu'il soit facile de configurer des virtual hosts, et ainsi servir plusieurs types de contenus (statiques ou dynamiques) très facilement.

Node est un outil rapide, puissant, élégant et sexy qui profite de la puissance brute du 'moteur' V8, et ne nécessite aucune dépendance externe.

Que faire si je veux la facilité / flexibilité de Apache mais aussi la force et l'élégance de Node.JS, et pourquoi ne puis-je avoir les deux?

Heureusement, avec la directive ProxyPass dans le fichier Apache httpd.conf il n'est pas difficile de diriger certaines URL verrs un serveur NodeJS et laisser Apache s'occuper d'autres URL.

ProxyPass /node http://localhost:8000/
ProxyPassReverse /node http://localhost:8000/
ProxyPreserveHost On

ProxyPass va emmener les URL contenant /node vers http://localhost:8000/ tandis que le ProxyPassReverse sert à ré-écrire les URL correctement.

Voici la doc et des exemples pour aller plus loin.

Aussi, assurez-vous que les lignes suivantes NE SONT PAS commentées afin d'activer le bon module de proxy :

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Si le virtualhost est actif, on recharge la configuration d’Apache via le terminal (ou en redémarrant apache via MAMP/WAMP):

/etc/init.d/apache2 reload

Ensuite, exécutez votre application Node sur le port 8000!

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');

Ensuite, vous pouvez accéder à toute logique Node.JS utilisant le chemin /node sur votre URL, le reste du site peut être laissé à Apache pour héberger vos pages PHP existantes:

image de la page chargée par nodejs sur l'url http://localhost/node

Vous avez une question ou une suggestion ? N'hésitez pas à réagir dans les commentaires !