Comment configurer Nginx en tant que serveur Web et proxy inverse pour Apache sur une droplet Ubuntu 14.04

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ègessudo. 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 avecmod_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.

phpinfo Server API

phpinfo PHP Variables

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:

foobar.net index page

test.io index page

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.

Nginx PHP 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.

phpinfo of Apache via Nginx

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_rpafREADME 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'environnementHTTPS en fonction de la valeur contenue dansX-Forwarded-Proto.

  • RPAF_SetPort - Définit la variable d'environnementSERVER_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

phpinfo ssl

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 virtuelapachede 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 virtuelapachede 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.