Pour quoi Nginx et Apache ensemble ?
Setup

Installation de Nginx
sudo apt-get install nginx
Configurer Nginx
Pour commencer à configurer Nginx, c’est au niveau du virtual host que ça se passe. ouvrez votre Vhost ou créez en un pour votre s’il n’existe pas :
sudo vi /etc/nginx/sites-available/example
la configuration suivante suffira à configurer votre vhost comme front-end. Notez la forte similitude par rapport à un vhost Apache :
server { listen 80; root /var/www/; index index.php index.html index.htm; server_name example.com; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }
Quelques explications tout de même
- le root est calé sur /var/www/ qui nous sert donc de répertoire web
- index.php a été ajouté à la ligne d’index
- try_files ordonne à nginx de servir toutes les requêtes HTTP qu’il reçoit. S’il n’est pas capable de le faire, alors il sous traite via le proxy pass (c’est là où notre apache va entrer en jeu ;))
- proxy_pass fournit à Nginx l’adresse du serveur de proxy
- “location ~ /\.ht {” interdit l’accès aux fichiers htaccess et .ht* d’apache
cette configuration “reroute” tous les fichiers avec l’extention .php vers notre serveur apache qui doit écouter le port 8080
Une fois ce vhost créée, il faut l’activer sur Nginx :
sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example
La prochaine étape pour nous va être l’installation d’Apache
Installation d’Apache
Comme pour Nginx, APT-GET fait le taf :
sudo apt-get install apache2
Comme Nginx n’a pas encore été démarré, alors Apache va démarer sur le port par défaut qui le port 80
Configurer Apache
nous avons besoin qu’Apache prenne le backend, et doit tourner sur le port 8080 pour être conformes à notre configuration d’Nginx.
On va commencer à dire à Apache d’écouter le bon port :
sudo vi /etc/apache2/ports.conf
Il faut trouver les lignes suivantes et les modifier avec les valeurs suivantes :
NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080
Comme vous pouvez le voir, Apache n’écoute que le port 8080 et uniquement en local. Sauvez et fermez.
Ca y’eest la config d’Apache est terminé. Il faut maintenant créer un virtual host pour matcher les informtaions envoyées par Nginx :
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
sudo vi /etc/apache2/sites-available/example
La chose la plus importante à modifier est le port d’écoute.
<VirtualHost 127.0.0.1:8080>
Il faut après changer le chemin vers votre répertoire web si nécessaire. Sauvez et fermez, puis activer le site en question en utilisant la commande courte d’apache “a2ensite”
sudo a2ensite example
Ca y’est, nous avons fini ! ce n’est pas très sorcier hein ;). Bon, avant de tester quoi que ce soit, il faut installer PHP, sinon apache ne va pour voir faire grand chose….
sudo apt-get install php5
Maintenant, redémarez les deux serveur pour que tous les changements soient pris en compte. Normalement, les status doivent être à OK, sinon, il faut consulter les logs pour voir ce qui ne va pas.
sudo service apache2 restart
sudo service nginx restart
Le test d’Apache et de Nginx ensemble
Nous avons un VPS qui tourne avec Nginx en front end et apache traitant les demande PHP en backend. Si on charge notre site example, il nous aménera à notre page d’accueil qui sera servie par Nginx avec ou sans Apache (en fonction de si elle est en php ou pas).
Pour tester apache, rien de plus simple, il faut créer un fichier php et l’appeller. si les choses ont bien été configurée, Nginx recoit la requete à la “proxy pass” à Apache.
Allons y, créer notre fichier php, pour tester créer un fichier info.php :
sudo vi /var/www/info.php
Et affichons les infos de notre installation php :
<? phpinfo( ); ?>
Sauvez et fermez le fichier.
En visitant la page example/info.php, la page d’information de php devrait s’afficher et vous pourrez y voir le serveur web qui a répondu à la requete. Dans ce cas, on devrait avoir Apache
Pour finir, vous pouvez voir quels ports sont ouverts et quelle application est associée à chaque port en lançant la commande suivante :
sudo netstat -plunt