Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
tutoriel:internet:serveur:apache-nginx:sansperte:start [2022/11/11 14:36] – supprimée - modification externe (Unknown date) 127.0.0.1 | tutoriel:internet:serveur:apache-nginx:sansperte:start [2022/11/11 14:36] (Version actuelle) – ↷ Page déplacée de tutoriel:internet:serveur:apacheversnginx:sansperte:start à tutoriel:internet:serveur:apache-nginx:sansperte:start admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | |||
+ | ====== De Apache à Nginx : remplacer Apache par Nginx sans perdre les données du site Web et avec le minimum de temps d' | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Dans cet article, nous illustrerons la migration d' | ||
+ | |||
+ | Pour rendre l' | ||
+ | |||
+ | En effet, Drupal 7, entièrement stockée dans la racine du document, est un bon exemple d' | ||
+ | |||
+ | Vous trouverez ici des idées précieuses même pour d' | ||
+ | |||
+ | C'est aussi une analyse détaillée de Drupal sur Apache. | ||
+ | </ | ||
+ | |||
+ | |||
+ | Ce tutoriel explique comment migrer un site Web de **Apache** vers **Nginx** sur un VPS Ubuntu 12.04. | ||
+ | |||
+ | Il suppose que vous avez installé un serveur **LAMP** (Linux, Apache, MySQL et PHP). | ||
+ | |||
+ | L' | ||
+ | |||
+ | |||
+ | <WRAP formalbox center 60%> | ||
+ | Principales différences entre Apache et Nginx : | ||
+ | | ^ Apache | ||
+ | ^ emplacement des fichiers de configuration | ||
+ | ^ fonctionnement | ||
+ | ^ répertoire racine par défaut | ||
+ | ^ système de cache intégré | ||
+ | </ | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | * Un serveur **LAMP** installé | ||
+ | ===== Première étape : Installer Nginx ===== | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | Nous installons **nginx** sur le port **8080** (ou **8008**), pour pouvoir configurer le nouveau serveur en consultant les anciens fichiers de configuration Apache. | ||
+ | </ | ||
+ | |||
+ | <WRAP list-deep> | ||
+ | - **Mettez à jour le système** :<cli prompt=' | ||
+ | - **Installez nginx** :<cli prompt=' | ||
+ | Un message d’erreur signale qu'il ne peut pas démarrer ; c’est normal car le port 80 est déjà utilisé par Apache, nous résoudrons ce problème plus loin. | ||
+ | </ | ||
+ | - **Installez php-fpm** (implémentation FastCGI de PHP qui est compatible nginx) :<cli prompt=' | ||
+ | - **Configuration provisoire de nginx** pour qu'il fonctionne comme le faisait Apache ((Pour faire fonctionner les deux serveurs simultanément, | ||
+ | - **sauvegardez le fichier du site par défaut** :<cli prompt=' | ||
+ | # You should look at the following URL's in order to grasp a solid understanding | ||
+ | # of Nginx configuration files in order to fully unleash the power of Nginx. | ||
+ | # https:// | ||
+ | # https:// | ||
+ | # https:// | ||
+ | # | ||
+ | # In most cases, administrators will remove this file from sites-enabled/ | ||
+ | # leave it as reference inside of sites-available where it will continue to be | ||
+ | # updated by the nginx packaging team. | ||
+ | # | ||
+ | # This file will automatically load configuration files provided by other | ||
+ | # applications, | ||
+ | # available underneath a path with that package name, such as /drupal8. | ||
+ | # | ||
+ | # Please see / | ||
+ | ## | ||
+ | |||
+ | # Default server configuration | ||
+ | # | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | |||
+ | # SSL configuration | ||
+ | # | ||
+ | # listen 443 ssl default_server; | ||
+ | # listen [::]:443 ssl default_server; | ||
+ | # | ||
+ | # Note: You should disable gzip for SSL traffic. | ||
+ | # See: https:// | ||
+ | # | ||
+ | # Read up on ssl_ciphers to ensure a secure configuration. | ||
+ | # See: https:// | ||
+ | # | ||
+ | # Self signed certs generated by the ssl-cert package | ||
+ | # Don't use them in a production server! | ||
+ | # | ||
+ | # include snippets/ | ||
+ | |||
+ | root / | ||
+ | |||
+ | # Add index.php to the list if you are using PHP | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name _; | ||
+ | |||
+ | location / { | ||
+ | # First attempt to serve request as file, then | ||
+ | # as directory, then fall back to displaying a 404. | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | # pass PHP scripts to FastCGI server | ||
+ | # | ||
+ | #location ~ \.php$ { | ||
+ | # include snippets/ | ||
+ | # | ||
+ | # # With php-fpm (or other unix sockets): | ||
+ | # | ||
+ | # # With php-cgi (or other tcp sockets): | ||
+ | # | ||
+ | #} | ||
+ | |||
+ | # deny access to .htaccess files, if Apache' | ||
+ | # concurs with nginx' | ||
+ | # | ||
+ | #location ~ /\.ht { | ||
+ | # deny all; | ||
+ | #} | ||
+ | } | ||
+ | |||
+ | |||
+ | # Virtual Host configuration for example.com | ||
+ | # | ||
+ | # You can move that to a different file under sites-available/ | ||
+ | # to sites-enabled/ | ||
+ | # | ||
+ | #server { | ||
+ | # listen 80; | ||
+ | # listen [::]:80; | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # root / | ||
+ | # index index.html; | ||
+ | # | ||
+ | # location / { | ||
+ | # | ||
+ | # } | ||
+ | #} | ||
+ | </ | ||
+ | - **Éditez avec les droits d' | ||
+ | - **listen** : remplacez le port d’écoute 80 par le port **8080** ou **8008** ((les lignes d' | ||
+ | ... | ||
+ | server { | ||
+ | # listen 80 default_server; | ||
+ | # listen [::]:80 default_server; | ||
+ | listen 8080 default_server; | ||
+ | listen [::]:8080 default_server; | ||
+ | ... | ||
+ | </ | ||
+ | - **root** : même racine qu' | ||
+ | - **index** : ajoutez index.php | ||
+ | - **juste après index, ajoutez** :<code - / | ||
+ | location ~ \.php$ { | ||
+ | try_files $uri =404; | ||
+ | fastcgi_pass unix:/ | ||
+ | fastcgi_index index.php; | ||
+ | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
+ | include fastcgi_params; | ||
+ | } | ||
+ | </ | ||
+ | - **Démarrez Nginx** :<cli prompt=' | ||
+ | - **Créez un vhost pour votre site**, par exemple :<code - / | ||
+ | server { | ||
+ | listen 80; | ||
+ | server_name monsite.tld; | ||
+ | location '/ | ||
+ | default_type " | ||
+ | root / | ||
+ | } | ||
+ | location / { | ||
+ | return 301 https:// | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Autres étapes ===== | ||
+ | |||
+ | ==== Vérification ==== | ||
+ | |||
+ | <WRAP list-deep> | ||
+ | - **Nginx fonctionne sur le port 8080 (ou 8008)** : visitez votre site avec le port 8080 (ou 8008) [[http:// | ||
+ | - **Apache fonctionne toujours sur le port par défaut (80)** : visitez votre site sans numéro de port [[http:// | ||
+ | </ | ||
+ | |||
+ | ==== Transcription de la configuration Apache en configuration Nginx ==== | ||
+ | |||
+ | Les deux serveurs étant maintenant opérationnels, | ||
+ | |||
+ | Pour cela, il faut, manuellement, | ||
+ | |||
+ | Sous Ubuntu, | ||
+ | * Apache conserve ses VirtualHosts dans **/ | ||
+ | * Nginx conserve ses déclarations de bloc **server** dans **/ | ||
+ | |||
+ | Les VirtualHosts d' | ||
+ | < | ||
+ | ServerAdmin webmaster@monsite.tld | ||
+ | ServerName monsite.tld | ||
+ | ServerAlias www.monsite.tld | ||
+ | |||
+ | DocumentRoot / | ||
+ | |||
+ | < | ||
+ | Options FollowSymLinks | ||
+ | AllowOverride None | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Options Indexes FollowSymLinks MultiViews | ||
+ | AllowOverride None | ||
+ | Require all granted | ||
+ | </ | ||
+ | |||
+ | ScriptAlias /cgi-bin/ / | ||
+ | < | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | Require all granted | ||
+ | </ | ||
+ | |||
+ | ErrorLog ${APACHE_LOG_DIR}/ | ||
+ | LogLevel warn | ||
+ | CustomLog ${APACHE_LOG_DIR}/ | ||
+ | |||
+ | Alias /doc/ "/ | ||
+ | < | ||
+ | Options Indexes MultiViews FollowSymLinks | ||
+ | AllowOverride None | ||
+ | Require all denied | ||
+ | Allow from 127.0.0.0/ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP list-deep> | ||
+ | - **Éditez avec les droits d' | ||
+ | server { | ||
+ | listen 8080; | ||
+ | |||
+ | root / | ||
+ | index index.html index.htm; | ||
+ | |||
+ | server_name localhost; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ / | ||
+ | } | ||
+ | |||
+ | location /doc/ { | ||
+ | alias / | ||
+ | autoindex on; | ||
+ | allow 127.0.0.1; | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | **Transcription des principales directives entre Apache et Nginx** | ||
+ | ^ Apache | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | </ | ||
+ | </ | ||
+ | - La transcription du fichier de VirtualHost ci-dessus en bloc server pourrait ressembler à ceci :<code nginx / | ||
+ | server { | ||
+ | listen 8080; # Nous laissons cela tel quel pour éviter tout conflit pour le moment | ||
+ | |||
+ | root / | ||
+ | server_name monsite.tld www.monsite.tld; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ / | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | fastcgi_split_path_info ^(.+\.php)(/ | ||
+ | fastcgi_pass unix:/ | ||
+ | fastcgi_index index.php; | ||
+ | include fastcgi_params; | ||
+ | } | ||
+ | |||
+ | location /doc/ { | ||
+ | alias / | ||
+ | autoindex on; | ||
+ | allow 127.0.0.1; | ||
+ | deny all; | ||
+ | } | ||
+ | |||
+ | location ~/\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ^ Apache | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | | ||
+ | | < | ||
+ | | | ||
+ | | < | ||
+ | | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | | ||
+ | | < | ||
+ | | < | ||
+ | | < | ||
+ | | | ||
+ | | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Nous avons éliminé certains éléments et ajouté quelques lignes supplémentaires que nous devrions expliquer. | ||
+ | |||
+ | - **Les lignes du journal des erreurs ont été supprimées** car ils sont déjà définis dans le fichier / | ||
+ | - **La directive ServerAdmin a été supprimée** car Nginx n' | ||
+ | - **La gestion de PHP a également un peu changé**. Étant donné que PHP est géré séparément dans Nginx, nous transmettons ces fichiers au programme php-fpm que nous avons installé précédemment. Ceci est implémenté via un socket (que nous devrons configurer momentanément). | ||
+ | |||
+ | La section documentation est modifiée pour refléter la documentation Nginx. Elle fonctionne par ailleurs de manière assez similaire. | ||
+ | |||
+ | Enfin, nous configurons Nginx pour refuser l' | ||
+ | </ | ||
+ | |||
+ | ==== Basculement de Apache vers Nginx quasiment sans coupure ==== | ||
+ | |||
+ | <WRAP list-deep> | ||
+ | - **Effectuez le basculement** quasiment sans coupure entre Apache et Nginx : | ||
+ | - **Remettez le port d’écoute sur 80** (placé tout à l' | ||
+ | - **Arrêtez Apache** :<cli prompt=' | ||
+ | - **Redémarrez Nginx** (ce qui applique la modification de port) :<cli prompt=' | ||
+ | - **Désinstallez Apache** :<cli prompt=' | ||
+ | </ | ||
+ | |||
+ | ==== Transcrivez votre configuration Apache ==== | ||
+ | |||
+ | |||
+ | |||
+ | Enregistrez et fermez le fichier lorsque vous avez terminé. | ||
+ | |||
+ | Nous devons redémarrer notre serveur Nginx pour que ces modifications soient reconnues :< | ||
+ | ==== Configurer PHP-FPM ==== | ||
+ | |||
+ | Maintenant que nous avons préparé la plupart de la configuration Nginx, nous devons modifier la configuration php-fpm pour communiquer en utilisant les canaux que nous avons spécifiés. | ||
+ | |||
+ | Pour commencer, nous devons modifier le fichier php.ini afin qu'il ne serve pas les fichiers de manière non sécurisée. | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | cgi.fix_pathinfo=0</ | ||
+ | |||
+ | Ensuite, nous allons changer la façon dont php-fpm se connecte à notre serveur. | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | |||
+ | Si vous rencontrez des problèmes avec la gestion d'un grand nombre de requêtes PHP, vous voudrez peut-être revenir ici et augmenter le nombre de processus enfants pouvant être générés en même temps. La ligne à modifier est :< | ||
+ | |||
+ | Maintenant, notre programme php-fpm devrait être configuré correctement. Nous devons le redémarrer pour que nos modifications se propagent :<cli prompt=' | ||
+ | |||
+ | Redémarrer Nginx ne fera pas de mal :<cli prompt=' | ||
+ | |||
+ | Vérifiez que tous les fichiers PHP que vous avez dans votre répertoire racine fonctionnent correctement. Vous devriez pouvoir exécuter les fichiers PHP comme dans Apache. | ||
+ | |||
+ | Si nous accédons au fichier info.php que nous avons créé dans le tutoriel Ubuntu LAMP, il devrait s' | ||
+ | {{ : | ||
+ | |||
+ | Dans la section Variables PHP, vous devriez voir Nginx répertorié comme la variable « SERVER_SOFTWARE » : | ||
+ | ==== Transition à chaud de votre site Nginx ==== | ||
+ | |||
+ | Après avoir effectué des tests approfondis, | ||
+ | |||
+ | Cela est possible car aucun de ces serveurs n' | ||
+ | |||
+ | La seule chose à faire est de modifier le port dans le bloc serveur Nginx. | ||
+ | |||
+ | Remettez le port par défaut à 80 pour accepter le trafic HTTP normal dès qu'il sera redémarré. Éditez avec les droits d' | ||
+ | server { | ||
+ | # listen 8000; | ||
+ | listen 80; | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | Si vous ne transférez que certains de vos sites vers Nginx et que vous continuez à diffuser du contenu à partir d' | ||
+ | |||
+ | C'est indispensable pour éviter les conflits. | ||
+ | |||
+ | Si cela n'est pas fait correctement, | ||
+ | |||
+ | Si vous prévoyez de continuer à exécuter Apache, vérifiez ces fichiers et emplacements pour l' | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | |||
+ | Une fois satisfait des modifications de tous les ports nécessaires, | ||
+ | |||
+ | Si vous n' | ||
+ | |||
+ | Si vous n' | ||
+ | apache2 install | ||
+ | apache2-bin install | ||
+ | apache2-data install | ||
+ | apache2-utils install | ||
+ | libapache-poi-java install | ||
+ | libapache-pom-java install | ||
+ | libapache2-mod-php install | ||
+ | libapache2-mod-php7.3 install | ||
+ | python-certbot-apache install | ||
+ | python3-certbot-apache install | ||
+ | </ | ||
+ | |||
+ | Vous pouvez ensuite les désinstaller avec apt. Par exemple:< | ||
+ | |||
+ | Vous pouvez également supprimer tous les packages de dépendance qui ne sont plus nécessaires :< | ||
+ | ==== Complications liées à la migration ==== | ||
+ | |||
+ | Certaines choses courantes dans le monde Apache peuvent vous prêter à confusion lorsque vous essayez de passer à Nginx. | ||
+ | |||
+ | === Réécrire les traductions et les fichiers .htaccess === | ||
+ | |||
+ | One of the most fundamental differences is that Nginx does not respect directory overrides. | ||
+ | |||
+ | Apache utilise des fichiers **.htaccess**, | ||
+ | |||
+ | Cela vous permet de placer des configurations spécifiques à un répertoire dans le répertoire qui héberge les fichiers. | ||
+ | |||
+ | Nginx n' | ||
+ | |||
+ | Par conséquent, | ||
+ | |||
+ | Une chose courante à conserver dans les fichiers .htaccess sont les règles du module mod_rewrite d' | ||
+ | |||
+ | === Module and Outside Configuration Complications === | ||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | ===== Problèmes connus ===== | ||
+ | |||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(fr)** < | ||
+ | * **(en)** [[https:// | ||
+ | * **(en)** [[https:// | ||
+ | * **(en)** [[https:// | ||
+ | |||
+ | ---- | ||
+ | //Basé sur << [[https:// | ||