Tutorial : Comment faire tourner Apache et NodeJs sur le même serveur grâce à NGINX?
qodop
Publié le 01/10/2015
Le problème : j'ai une instance EC2 d'Amazon avec Ubuntu 12 et une installation Wordpress multisite faite par Bitnami tournant sur un serveur Apache (port 80). Je veux utiliser le même serveur pour faire tourner mon site en NodeJs (avec le framework Keystone.js) et je veux qu'il réponde aussi sur le traffic http donc le port 80. J'installe donc un proxy NGINX pour mapper le port 80 sur le port de mon appli NodeJs (en l'occurrence 60001). Mais je ne peux pas faire tourner Apache et Nginx sur le même port. Impossible de lancer les deux services en même temps. Impossible également d'associer 2 ip elastiques à la même instance avec AWS.
La solution : Utiliser NGINX en front pour écouter le traffic web sur le port 80 et mapper mes différents dns sur les différents ports .
Comment faire ?
1. Tout d'abord, il faut passer Apache sur un autre port que le 80 :
éditer le fichier httpd.conf
vi /home/bitnami/stack/apache2/conf/httpd.conf
et changer la ligne
Listen 80
en
Listen 60002
Relancer votre server et Apache ce qui donne avec les scripts de Bitnami
sudo /opt/bitnami/ctlscript.sh restart apache
Apache écoutera maintenant sur le port 60002 (le script Bitnami sort un log disant qu'Apache écoute sur le port 80, mais c'est faux, ils ont mis en dure le message). Vous pouvez tester que votre site marche encore en essayant d'ouvrir http://votre_ip:votre_port par exemple dans mon cas : http://54.194.220.180:60002.
NOTE: Sur AWS, il faut bien attribuer un groupe de sécurité à l'instance dont les ports sont ouverts (par défaut tous les ports autres que http et https sont fermés)
2. Installer NGINX avec un : sudo apt-get install nginx
Configurer NGINX sur le port 80 et ajouter les hôtes pour le site Apache et le site NodeJs :
éditer la conf NGINX :
vi /etc/nginx/sites-available/default
et coller cette conf :
server {
listen 80;
server_name VOTRE_DNS_POUR_LE_SITE_NODEJS;
location / {
proxy_pass http://VOTRE_IP_EXTERNE:LE_PORT_DE_VOTRE_SERVEUR_NODEJS;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name VOTRE_DNS_POUR_LE_SITE_APACHE;
root VOTRE_ROOT_APACHE;
location / {
proxy_pass http:/VOTRE_IP_PUBLIQUE:LE_PORT_DE_VOTRE_SITE_APACHE;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Restartez NGINX : service nginx restart
Vous avez mappé Apache et NodeJs derrière NGINX, ce qui vous apporte également la puissance du cache static de NGINX. (au final mes 2 sites sont plus rapides que lorsque je n'avais pas NGINX!)
A NOTER : Sur mon install Multisite Wordpress de Bitnami, les fichiers httpd.conf sont impriqués les uns dans les autres et j'ai dû mettre à jour tous les documentRoot pour les faire pointer vers le bon dosser de Wordpress.
Dernières publications
Les dernières publications de nos consultants AMO experts web