introduction
Apache et Nginx sont deux serveurs Web open source populaires souvent utilisés avec PHP. Il peut être utile de les exécuter sur la même machine virtuelle lorsque vous hébergez plusieurs sites Web dont les besoins varient. La solution générale pour exécuter deux serveurs Web sur un même système consiste à utiliser plusieurs adresses IP ou des numéros de port différents.
Les droplets possédant à la fois des adresses IPv4 et IPv6 peuvent être configurés pour desservir les sites Apache sur un protocole et les sites Nginx sur l’autre, mais cela n’est pas pratique dans la mesure où l’adoption d’IPv6 par les FAI n’est pas encore généralisée. Avoir un numéro de port différent comme81
ou8080
pour le deuxième serveur Web est une autre solution, mais le partage d'URL avec des numéros de port (tels quehttp://example.com:81
) n'est pas toujours raisonnable ou idéal.
Ce tutoriel vous montrera comment configurer Nginx à la fois en tant que serveur Web et en tant que proxy inverse pour Apache - le tout sur un seul droplet. En fonction de l'application Web, des modifications de code peuvent être nécessaires pour que Apache reste informé, notamment lorsque les sites SSL sont configurés. Pour nous en assurer, nous installerons un module Apache nommémod_rpaf qui réécrit certaines variables d'environnement afin qu'il semble qu'Apache gère directement les requêtes des clients Web.
Nous hébergerons quatre noms de domaine sur un Droplet. Deux seront servis par Nginx:example.com
(l'hôte virtuel par défaut) etsample.org
. Les deux autres,foobar.net
ettest.io
, seront servis par Apache.
Conditions préalables
-
Une nouvelle Ubuntu 14.04 Droplet.
-
Un compte utilisateur standard avec les privilèges
sudo
. Vous pouvez créer un compte standard en suivant les étapes 2 et 3 desInitial Server Setup with Ubuntu 14.04. -
Les noms de domaine souhaités doivent indiquer l’adresse IP de votre Droplet dans le panneau de configuration de DigitalOcean. Voir l'étape 3 deHow To Set Up a Host Name with DigitalOcean pour un exemple de la façon de procéder. Si vous hébergez le DNS de vos domaines ailleurs, vous devez créer desA records appropriés à la place.
Références facultatives
Ce tutoriel nécessite des connaissances de base sur les hôtes virtuels dans Apache et Nginx, ainsi que sur la création et la configuration de certificats SSL. Pour plus d'informations sur ces sujets, voir les articles suivants.
[[step-1 -—- Installing-apache-and-php5-fpm]] == Étape 1 - Installation d'Apache et de PHP5-FPM
Outre Apache et PHP-FPM, nous devons également installer le module PHP FastCGI Apache. Il s’agit delibapache2-mod-fastcgi
, disponible dans le référentielmultiverse d’Ubuntu, qui doit d’abord être activé dans le fichiersources.list
.
sudo nano /etc/apt/sources.list
Recherchez les lignes suivantes et décommentez-les en supprimant le symbole de hachage (#
) au début.
# deb http://mirrors.digitalocean.com/ubuntu trusty multiverse
. . .
# deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse
Cela devrait vous laisser avec ce qui est montré ci-dessous.
deb http://mirrors.digitalocean.com/ubuntu trusty multiverse
. . .
deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse
Enregistrez le fichier et mettez à jour le référentiel apt.
sudo apt-get update
Ensuite, installez les packages nécessaires.
sudo apt-get install apache2 libapache2-mod-fastcgi php5-fpm
[[step-2 -—- configuring-apache-and-php5-fpm]] == Étape 2 - Configuration d'Apache et de PHP5-FPM
Dans cette étape, nous allons changer le numéro de port d'Apache en8080
et le configurer pour qu'il fonctionne avec PHP5-FPM à l'aide du modulemod_fastcgi
. Editez le fichier de configuration Apache et changez le numéro de port d'Apache.
sudo nano /etc/apache2/ports.conf
Trouvez la ligne suivante:
Listen 80
Changez le en:
Listen 8080
Enregistrez et quittezports.conf
.
Les serveurs WebNote: sont généralement configurés pour écouter sur127.0.0.1:8080
lors de la configuration d'un proxy inverse, mais cela définirait la valeur de la variable d'environnement PHPSERVER_ADDR sur l'adresse IP de bouclage au lieu de l'adresse IP publique du serveur . Notre objectif est de configurer Apache de telle sorte que ses sites Web ne voient pas de proxy inverse devant lui. Donc, nous allons le configurer pour écouter sur8080
sur toutes les adresses IP.
Nous allons ensuite éditer le fichier d’hôte virtuel par défaut d’Apache. La directive<VirtualHost>
de ce fichier est définie pour servir les sites uniquement sur le port80
.
sudo nano /etc/apache2/sites-available/000-default.conf
La première ligne devrait être:
Changez le en:
Enregistrez le fichier et rechargez Apache.
sudo service apache2 reload
Vérifiez qu'Apache écoute maintenant sur8080
.
sudo netstat -tlpn
La sortie doit ressembler à celle ci-dessous, avecapache2 écoutant sur:::8080.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086/sshd
tcp6 0 0 :::8080 :::* LISTEN 4678/apache2
tcp6 0 0 :::22 :::* LISTEN 1086/sshd
[[step-3 -—- configuring-apache-to-use-mod_fastcgi]] == Étape 3 - Configuration d'Apache pour utiliser mod_fastcgi
Apache fonctionne avecmod_php
par défaut, mais il nécessite une configuration supplémentaire pour fonctionner avec PHP5-FPM.
Note: Si vous essayez ce tutoriel sur une installation existante de LAMP avec
mod_php
, désactivez-le d'abord avec:sudo a2dismod php5
Nous allons ajouter un bloc de configuration pourmod_fastcgi
qui dépend demod_action
. mod-action
est désactivé par défaut, nous devons donc d'abord l'activer.
sudo a2enmod actions
Découvrez quelle version d'Apache est installée sur votre Droplet avec:
sudo apache2 -v
Modifiez le fichier de configuration defastcgi
en conséquence. Ces directives de configuration transmettent les requêtes des fichiers.php
au socket PHP5-FPM UNIX.
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
Ajoutez les lignes suivantes au bas du bloc<IfModule mod_fastcgi.c> . . . </IfModule>
pourApache 2.4:
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
Require all granted
Apache 2.2 ne nécessite pas la section<Directory>
donc ajoutez ce qui suit:
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
Une fois terminé enfastcgi.conf
, effectuez un test de configuration.
sudo apachectl -t
Rechargez Apache siSyntax OK est affiché. Si vous voyez l'avertissementCould not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message.
, c'est très bien. Cela ne nous concerne pas maintenant.
sudo service apache2 reload
[[step-4 -—- verifying-php-feature]] == Étape 4 - Vérification de la fonctionnalité PHP
Vérifiez si PHP fonctionne en créant un fichierphpinfo()
et en y accédant à partir de votre navigateur Web.
echo "" | sudo tee /var/www/html/info.php
Pour voir le fichier dans un navigateur, accédez àhttp://111.111.111.111:8080/info.php
mais en utilisant l'adresse IP de votre Droplet. Cela vous donnera une liste des spécifications de configuration que PHP utilise.
En haut de la page, vérifiez queServer API ditFPM/FastCGI. Environ les deux tiers du bas de la page, la sectionPHP Variables vous indiquera queSERVER_SOFTWARE est Apache sur Ubuntu. Ceux-ci confirment quemod_fastcgi
est actif et qu'Apache utilise PHP5-FPM pour traiter les fichiers PHP.
[[step-5 -—- creation-virtual-hosts-for-apache]] == Étape 5 - Création d'hôtes virtuels pour Apache
Nous allons créer deux fichiers d'hôte virtuel Apache pour les domainesfoobar.net
ettest.io
. Cela commence par la création des répertoiresdocument root pour les deux sites.
sudo mkdir -v /var/www/{foobar.net,test.io}
Nous allons maintenant ajouter deux fichiers à chaque répertoire pour les tests une fois l’installation terminée.
Nous allons d'abord créer un fichierindex
pour chaque site.
echo "Foo Bar
" | sudo tee /var/www/foobar.net/index.html
echo "Test IO
" | sudo tee /var/www/test.io/index.html
Ensuite, un fichierphpinfo()
.
echo "" | sudo tee /var/www/foobar.net/info.php
echo "" | sudo tee /var/www/test.io/info.php
Créez le fichier d'hôte virtuel pour le domainefoobar.net
.
sudo nano /etc/apache2/sites-available/foobar.net.conf
Placez-y la directive suivante:
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/foobar.net
AllowOverride All
Enregistrez et fermez le fichier. Ensuite, faites de même pourtest.io
.
sudo nano /etc/apache2/sites-available/test.io.conf
ServerName test.io
ServerAlias www.test.io
DocumentRoot /var/www/test.io
AllowOverride All
Note 1:AllowOverride All
active la prise en charge de.htaccess
.
Note 2: Ce ne sont que les directives les plus élémentaires. Pour un guide complet sur la configuration des hôtes virtuels dans Apache, consultezHow To Set Up Apache Virtual Hosts on Ubuntu 14.04 LTS.
Maintenant que les deux hôtes virtuels Apache sont configurés, activez les sites à l'aide de la commandea2ensite
. Cela crée un lien symbolique vers le fichier hôte virtuel dans le répertoiresites-enabled
.
sudo a2ensite foobar.net
sudo a2ensite test.io
Recherchez à nouveau les erreurs de configuration dans Apache.
sudo apachectl -t
Rechargez-le siSyntax OK est affiché.
sudo service apache2 reload
Pour confirmer que les sites fonctionnent, ouvrezhttp://foobar.net:8080
ethttp://test.io:8080
dans votre navigateur et vérifiez qu'ils affichent leurs fichiersindex.html.
Tu devrais voir:
Vérifiez également si PHP fonctionne en accédant aux fichiersinfo.php:http://foobar.net:8080/info.php
ethttp://test.io:8080/info.php
.
Vous devriez voir la même liste de spécifications de configuration PHP sur chaque site que celle décrite à l’étape 1. Nous avons maintenant deux sites Web hébergés sur Apache au port8080
.
[[step-6 -—- installation-et-configuration-nginx]] == Étape 6 - Installation et configuration de Nginx
Dans cette étape, nous installerons Nginx et configurerons les domainesexample.com
etsample.org
en tant qu'hôtes virtuels de Nginx. Pour un guide complet sur la configuration des hôtes virtuels dans Nginx, consultezHow To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu 14.04 LTS.
Installez Nginx.
sudo apt-get install nginx
Supprimez ensuite le lien symbolique de l’hôte virtuel par défaut.
sudo rm /etc/nginx/sites-enabled/default
Nous allons maintenant créer des hôtes virtuels pour Nginx. Créez d'abord les répertoiresdocument root pour les deux sites Web:
sudo mkdir -v /usr/share/nginx/{example.com,sample.org}
Comme nous l'avons fait avec les hôtes virtuels d'Apache, nous allons à nouveau créer les fichiersindex
etphpinfo()
pour les tester une fois l'installation terminée.
echo "Example.com
" | sudo tee /usr/share/nginx/example.com/index.html
echo "Sample.org
" | sudo tee /usr/share/nginx/sample.org/index.html
echo "" | sudo tee /usr/share/nginx/example.com/info.php
echo "" | sudo tee /usr/share/nginx/sample.org/info.php
Créez maintenant un fichier hôte virtuel pour le domaineexample.com
.
sudo nano /etc/nginx/sites-available/example.com
Nginx appelle les zonesserver {. . .}
d'un fichier de configurationserver blocks. Créez un bloc de serveur pour l'hôte virtuel principal,example.com. La directive de configurationdefault_server
en fait l'hôte virtuel par défaut qui traite les requêtes HTTP qui ne correspondent à aucun autre hôte virtuel.
Collez ce qui suit dans le fichier pourexample.com:
server {
listen 80 default_server;
root /usr/share/nginx/example.com;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Enregistrez et fermez le fichier. Créez maintenant un fichier hôte virtuel pour le deuxième domaine de Nginx,sample.org
.
sudo nano /etc/nginx/sites-available/sample.org
Le bloc serveur poursample.org devrait ressembler à ceci:
server {
root /usr/share/nginx/sample.org;
index index.php index.html index.htm;
server_name sample.org www.sample.org;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Enregistrez et fermez le fichier. Activez ensuite les deux sites en créant des liens symboliques vers le répertoiresites-enabled
.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org
Effectuez un test de configuration Nginx:
sudo service nginx configtest
Puis rechargez Nginx siOK est affiché.
sudo service nginx reload
Accédez maintenant au fichierphpinfo()
de vos hôtes virtuels Nginx dans un navigateur Web parhttp://example.com/info.php
ethttp://sample.org/info.php
. Regardez à nouveau sous la sectionPHP Variables.
[“SERVER_SOFTWARE”] devrait direnginx, indiquant que les fichiers ont été directement servis par Nginx. [“DOCUMENT_ROOT”] doit pointer vers le répertoire que vous avez créé plus tôt dans cette étape pour chaque site Nginx.
À ce stade, nous avons installé Nginx et créé deux hôtes virtuels. Ensuite, nous allons configurer un hôte virtuel supplémentaire pour les requêtes proxy destinées aux domaines hébergés sur Apache.
[[step-7 -—- configuring-nginx-for-apache-39-s-virtual-hosts]] == Étape 7 - Configuration de Nginx pour les hôtes virtuels Apache
Dans cette section, nous allons créer un hôte virtuel Nginx supplémentaire avec plusieurs noms de domaine dans les directivesserver_name
. Les demandes pour ces noms de domaine seront envoyées par proxy à Apache.
Créez un nouveau fichier d’hôte virtuel Nginx:
sudo nano /etc/nginx/sites-available/apache
Ajoutez le bloc de code ci-dessous. Cela spécifie les noms des domaines d’hôte virtuel Apache et envoie les requêtes à Apache. N'oubliez pas d'utiliser l'adresse IP publique dansproxy_pass
.
server {
listen 80;
server_name foobar.net www.foobar.net test.io www.test.io;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enregistrez le fichier et activez ce nouvel hôte virtuel en créant un lien symbolique.
sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache
Faites un test de configuration:
sudo service nginx configtest
Rechargez Nginx siOK est affiché.
sudo service nginx reload
Ouvrez le navigateur et accédez auxhttp://foobar.net/info.php
sur l’un des noms de domaine Apache. Faites défiler jusqu'à la sectionPHP Variables et vérifiez les valeurs affichées.
Les variablesSERVER_SOFTWARE etDOCUMENT_ROOT doivent confirmer que cette requête a été gérée par Apache. Les variablesHTTP_X_REAL_IP etHTTP_X_FORWARDED_FOR ont été ajoutées par Nginx et doivent afficher l'adresse IP publique de l'ordinateur à partir duquel vous accédez à l'URL dans votre navigateur.
Nous avons correctement configuré Nginx pour qu’il envoie des requêtes à Apache pour des domaines spécifiques. L'étape suivante consiste à configurer Apache pour définir les variablesREMOTE_ADDR
comme s'il traitait ces requêtes directement.
[[step-8 -—- installation-et-configuration-mod_rpaf]] == Étape 8 - Installation et configuration de mod_rpaf
Dans cette étape, nous allons installer un module Apache nommémod_rpaf qui réécrit les valeurs deREMOTE_ADDR,HTTPS etHTTP_PORT en fonction des valeurs fournies par un proxy inverse. Sans ce module, certaines applications PHP nécessiteraient que les modifications de code fonctionnent de manière transparente derrière un proxy. Ce module est présent dans le référentiel d'Ubuntu en tant quelibapache2-mod-rpaf
mais il est obsolète et ne prend pas en charge certaines directives de configuration. Au lieu de cela, nous allons l'installer à partir des sources.
Installez les paquets nécessaires pour compiler et construire le module:
sudo apt-get install unzip build-essential apache2-threaded-dev
Téléchargez la dernière version stable de GitHub.
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
Extrayez-le avec:
unzip stable.zip
Changer dans le répertoire de travail.
cd mod_rpaf-stable
Ensuite, compilez et installez le module.
sudo make
sudo make install
Créez un fichier dans le répertoiremods-available
qui charge le module rpaf.
sudo nano /etc/apache2/mods-available/rpaf.load
Ajoutez la ligne suivante au fichier:
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so
Créez un autre fichier dans ce répertoire. Cela contiendra les directives de configuration.
sudo nano /etc/apache2/mods-available/rpaf.conf
Ajoutez le bloc de code suivant, en veillant à ajouter l'adresse IP de votre Droplet.
RPAF_Enable On
RPAF_Header X-Real-Ip
RPAF_ProxyIPs 111.111.111.111
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
Voici une brève description de chaque directive. Voir le fichiermod_rpaf
README pour plus d'informations.
-
RPAF_Header - L’en-tête à utiliser pour l’adresse IP réelle du client.
-
RPAF_ProxyIPs - L'adresse IP du proxy pour laquelle ajuster les requêtes HTTP.
-
RPAF_SetHostName - Met à jour le nom de l'hôte virtuel pour que ServerName et ServerAlias fonctionnent.
-
RPAF_SetHTTPS - Définit la variable d'environnement
HTTPS
en fonction de la valeur contenue dansX-Forwarded-Proto
. -
RPAF_SetPort - Définit la variable d'environnement
SERVER_PORT
. Utile lorsque Apache est derrière un proxy SSL.
Sauvegardezrpaf.conf
et activez le module.
sudo a2enmod rpaf
Cela crée des liens symboliques des fichiersrpaf.load
etrpaf.conf
dans le répertoiremods-enabled
. Maintenant, faites un test de configuration.
sudo apachectl -t
Rechargez Apache siSyntax OK est renvoyé.
sudo service apache2 reload
Accédez à la pagephpinfo()
de l’un des sites Web Apache sur votre navigateur et consultez la sectionPHP Variables. La variableREMOTE_ADDR sera désormais également celle de l’adresse IP publique de votre ordinateur local.
[[step-9 -—- setting-up-https-sites Web-optional]] == Étape 9 - Configuration des sites Web HTTPS (facultatif)
Dans cette étape, nous allons configurer des certificats SSL pour les deux domaines hébergés sur Apache. Nginx prend en charge la résiliation SSL afin que nous puissions configurer SSL sans modifier les fichiers de configuration d’Apache. Le modulemod_rpaf
garantit que les variables d'environnement requises sont définies sur Apache pour que les applications fonctionnent de manière transparente derrière un proxy inverse SSL.
Créez un répertoire pour les certificats SSL et leurs clés privées.
sudo mkdir /etc/nginx/ssl
Pour cet article, nous utiliserons des certificats SSL auto-signés d'une validité de 10 ans. Générez des certificats auto-signés pour lesfoobar.net
ettest.io
.
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/foobar.net-key.pem -out /etc/nginx/ssl/foobar.net-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/test.io-key.pem -out /etc/nginx/ssl/test.io-cert.pem -days 3650 -nodes
Chaque fois, vous serez invité à fournir des informations d'identification de certificat.
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Inc
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:
Ouvrez maintenant le fichier d'hôte virtuel deapache
qui envoie par proxy les requêtes de Nginx vers Apache.
sudo nano /etc/nginx/sites-available/apache
Puisque nous avons des certificats et des clés séparés pour chaque domaine, nous devons avoir des blocsserver { . . . }
séparés pour chaque domaine. Vous devez supprimer son contenu actuel et lorsque vous avez terminé, votre fichier vhostapache
devrait ressembler à celui ci-dessous.
server {
listen 80;
listen 443 ssl;
server_name test.io www.test.io;
ssl on;
ssl_certificate /etc/nginx/ssl/test.io-cert.pem;
ssl_certificate_key /etc/nginx/ssl/test.io-key.pem;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
listen 443 ssl;
server_name foobar.net www.foobar.net;
ssl on;
ssl_certificate /etc/nginx/ssl/foobar.net-cert.pem;
ssl_certificate_key /etc/nginx/ssl/foobar.net-key.pem;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enregistrez le fichier et effectuez un test de configuration.
sudo service nginx configtest
Rechargez Nginx si le test réussit.
sudo service nginx reload
Accédez à l'un des domaines d'Apache via le navigateur avec le préfixehttps://
:https://foobar.net/info.php
Regardez dans la sectionPHP Variables. La variableSERVER_PORT a été définie sur443 etHTTPS suron, comme si Apache était directement accessible via HTTPS. Avec ces variables définies, les applications PHP ne doivent pas être spécialement configurées pour fonctionner derrière un proxy inverse.
[[step-10 -—- blocking-direct-access-to-apache-optional]] == Étape 10 - Bloquer l'accès direct à Apache (facultatif)
Comme Apache écoute sur le port8080
sur l'adresse IP publique, il est accessible à tous. Il peut être bloqué en utilisant la commande IPtables suivante dans votre jeu de règles de pare-feu.
sudo iptables -I INPUT -p tcp --dport 8080 ! -s 111.111.111.111 -j REJECT --reject-with tcp-reset
Assurez-vous d’utiliser l’adresse IP de votre Droplet à la place de l’exemple en rouge. Une fois que le port8080
est bloqué dans votre pare-feu, vérifiez qu'Apache est inaccessible sur celui-ci. Ouvrez votre navigateur Web et essayez d'accéder à l'un des noms de domaine Apache sur le port8080
. Par exemple:http://example.com:8080
Le navigateur doit afficher un message d'erreur «Impossible d'établir la connexion» ou «La page Web n'est pas disponible». Avec l'option IPtablestcp-reset
en place, un étranger ne verrait aucune différence entre le port8080
et un port qui ne dispose d'aucun service.
Les règles IPtables deNote: ne survivent pas par défaut à un redémarrage du système. Il existe plusieurs façons de conserver les règles IPtables, mais la plus simple est d'utiliseriptables-persistent
dans le référentiel d'Ubuntu.
[[step-11 -—- servant-static-files-using-nginx-optional]] == Étape 11 - Servir des fichiers statiques à l'aide de Nginx (facultatif)
Lorsque le mandataire Nginx demande les domaines d’Apache, il envoie chaque demande de fichier au domaine d’Apache. Nginx est plus rapide qu'Apache en servant des fichiers statiques tels que des images, du JavaScript et des feuilles de style. Donc, dans cette section, nous allons configurer le fichier hôte virtuelapache
de Nginx pour servir directement les fichiers statiques et envoyer simplement des requêtes PHP à Apache.
Ouvrez le fichier d'hôte virtuel deapache
.
sudo nano /etc/nginx/sites-available/apache
Ajoutez deux blocslocation supplémentaires à chaque bloc serveur comme indiqué en rouge dans le bloc de code ci-dessous.
server {
listen 80;
server_name test.io www.test.io;
root /var/www/test.io;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\. {
deny all;
}
}
server {
listen 80;
server_name foobar.net www.foobar.net;
root /var/www/foobar.net;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\. {
deny all;
}
}
La directivetry_files
oblige Nginx à rechercher les fichiers dans lesdocument root et à les servir directement. Si le fichier a une extension.php
, la requête est transmise à Apache. Même si le fichier n'est pas trouvé dans lesdocument root, la demande est transmise à Apache afin que les fonctionnalités de l'application comme les permaliens fonctionnent sans problème.
Sécurisez le fichier et effectuez un test de configuration.
sudo service nginx configtest
Rechargez Nginx si le test réussit.
sudo service nginx reload
Pour vérifier que cela fonctionne, vous pouvez examiner les fichiers journaux d'Apache dans/var/log/apache2
et voir les requêtes GET pour les fichiersindex.php
detest.io
etfoobar.net
. Le seul inconvénient de cette configuration est qu’Apache ne pourra pas restreindre l’accès aux fichiers statiques. Le contrôle d’accès aux fichiers statiques doit être configuré dans le fichier d’hôte virtuelapache
de Nginx.
Warning: La directivelocation ~ /\.
est très importante à inclure. Cela empêche Nginx d'imprimer le contenu de fichiers comme.htaccess
et.htpasswd
.
Conclusion
Après avoir terminé ce didacticiel, vous devriez maintenant avoir un Droplet Ubuntu avec Nginx servantexample.com
etsample.org
, ainsi qu'Apache servantfoobar.net
ettest.io
. Bien que Nginx agisse en tant que proxy inverse pour Apache, le service proxy de Nginx est transparent et les connexions aux domaines d’Apache semblent être servies directement à partir d’Apache lui-même.