Nous allons voir dans cet article comment installer et configurer le serveur web NGINX sous CentOS 7. NGINX (pronocé Engine X) est une alternative à Apache et est considéré comme l’un des serveurs web le plus populaire au monde. Contrairement à Apache, NGINX consomme moins de ressources et plus rapide.
Serveur LEMP Stack : Linux, Nginx, MySQL/MariaDB, PHP
Serveur LAMP Stack : Linux, Apache, MySQL/MariaDB, PHP voir l’article
Ce qu’il vous faut :
- Machine virtuelle CentOS 7 :machine-virtuelle-centos-7/
- Par défaut, après l’installation de CentOS 7, le firewall et le SELinux sont activés. Ne pas les désactiver.
- Configuration Réseau
- Installation Tools
- Activer SELinux
- Activer le Firewall
- Installer les VMtools
- Changer le Hostname
- Configuration Réseau
- Installer EPEL Release : #Installation_EPEL_Repository
- Index of / MariaDB version : yum.mariadb.org/
- Index of / Nginx Packages : nginx.org/packages/mainline/
- Index of / Remi Release : rpms.remirepo.net/enterprise/
[root@pixelabs ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@pixelabs ~]#
Installation MariaDB 10.4
Commençons par l’installation d’un serveur de base de données. J’ai opté pour MariaDB. N’oubliez pas d’ajouter EPEL Release et de mettre à jour votre système.
Ajouter la repo pour MariaDB 10.4
[root@pixelabs ~]# nano /etc/yum.repos.d/mariadb.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Enregistrer et quitter : Ctrl + o + Enter et Ctrl + x
[root@pixelabs ~]# yum makecache fast
Lancer l’installation :
[root@pixelabs ~]# yum install -y MariaDB-server MariaDB-client
Une fois les dépendances résolues, répondre : Y
Une fois terminé, démarrer MariaDB :
[root@pixelabs ~]# systemctl start mariadb [root@pixelabs ~]# systemctl enable mariadb [root@pixelabs ~]# systemctl status mariadb
A la racine de votre serveur, lancer le script suivant pour sécuriser MariaDB : mysql_secure_installation
- Enter current password for root (enter for none): Entrée
- Ajouter un mot de passe et Entrée.
- Si vous avez des erreurs de ce type :
ERROR 1146 (42S02) at line 1: Table 'mysql.global_priv' doesn't exist Failed! Cleaning up... [ERROR] Missing system table mysql.roles_mapp...te it [ERROR] Incorrect definition of table mysql.e...'POST [ERROR] mysqld: Event Scheduler: An error occ...uler. [Warning] Failed to load slave replication st...exist
Lancer la commande suivante :
[root@pixelabs ~]# mysql_upgrade -u root --force
Relancer le script : mysql_secure_installation
- Répondre « Y » pour le reste.
Remove anonymous users? [Y/n]# y ... Success! Disallow root login remotely? [Y/n]# y ... Success! Remove test database and access to it? [Y/n]# y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reload privilege tables now? [Y/n]# y ... Success! Thanks for using MariaDB!
Tester en se connectant à la base de données :
Installation PHP7.3 FPM
Passons à l’installation de PHP. Nous allons installer la version PHP7.3 depuis le dépôt Remi.
[root@pixelabs ~]# yum install yum-utils -y
Ajouter le dépôt :
[root@pixelabs ~]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Activer la repo pour PHP7.3
[root@pixelabs ~]# yum-config-manager --enable remi-php73 Modules complémentaires chargés : fastestmirror =================== repo: remi-php73 =========================== [remi-php73] async = True bandwidth = 0 base_persistdir = /var/lib/yum/repos/x86_64/7 baseurl = cache = 0 cachedir = /var/cache/yum/x86_64/7/remi-php73 check_config_file_age = True compare_providers_priority = 80 cost = 1000 deltarpm_metadata_percentage = 100 deltarpm_percentage = enabled = 1 enablegroups = True ... ...
Lancer l’installation de PHP et les modules :
[root@pixelabs ~]# yum install php php-cli php-fpm php-mysqlnd php-zip php-opcache php-xml php-xmlrpc php-gd php-mbstring php-json php-curl php-devel php-mcrypt php-pear php-bcmath
Afficher la version, activer et démarrer PHP-FPM :
[root@pixelabs ~]# php -v [root@pixelabs ~]# systemctl enable php-fpm [root@pixelabs ~]# systemctl start php-fpm [root@pixelabs ~]# systemctl status php-fpm
Installation NGINX Server
Pour finir notre serveur LEMP Stack, nous allons installer Nginx.
Ajouter le dépôt Nginx :
[root@pixelabs ~]# nano /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
Enregistrer et quitter : Ctrl + o + Enter et Ctrl + x
[root@pixelabs ~]# yum makecache fast
Lancer l’installation de Nginx :
[root@pixelabs ~]# yum install nginx
tout ça pour 2 Mo… comme quoi, c’est une petite bête 🙂
Activer, Lancer Nginx :
[root@pixelabs ~]# systemctl enable nginx [root@pixelabs ~]# systemctl start nginx [root@pixelabs ~]# systemctl status nginx
Pour afficher la version :
[root@pixelabs ~]# nginx -v nginx version: nginx/1.15.10 [root@pixelabs ~]#
Notre serveur LEMP Stack est installé. Nous allons maintenant passer à la configuration.
Configuration PHP-FPM
PHP est configuré par défaut pour fonctionner avec l’utilisateur/groupe apache/apache, mais comme nous avons installé Nginx, cet utilisateur doit donc correspondre à l’utilisateur et au groupe utilisé par Nginx. C’est à dire nginx/nginx.
Editer le fichier suivant :
[root@pixelabs ~]# nano /etc/php-fpm.d/www.conf
Remplacer les paramètres suivant :
user = apache ; RPM: Keep a group allowed to write in log dir. group = apache ... ... listen = 127.0.0.1:9000
Par :
user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ... ... listen = /var/run/php-fpm/php-fpm.sock
Et juste un peu plus bas, décommenter et modifier également ces 3 lignes :
listen.owner = nginx listen.group = nginx listen.mode = 0660
Pour finir avec ce fichier, décommenter ces deux lignes :
Astuce : avec l’éditeur nano, effectuer une recherche avec CTRL+ W, taper le mot clé pm.status et entrer.
pm.status_path = /status ping.path = /ping
Ces deux paramètres vont nous permettre de vérifier le PHP-FPM via la navigateur.
Pour plus de sécurité, éditer le fichier suivant :
[root@pixelabs ~]# nano /etc/php.ini
Modifier la ligne suivante :
;cgi.fix_pathinfo=1 en : cgi.fix_pathinfo=0
Remarque : l’activation de ce paramètre permet à PHP de n’accepter que les URI qui existent réellement sur le serveur. Source : nginx.com/…/tutorials/config_…#passing-uncontrolled-requests-to-php
Vérifier la syntaxe et relancer le PHP :
[root@pixelabs ~]# php-fpm -t [04-Apr-2019 19:05:12] NOTICE: configuration file /etc/php-fpm.conf test is successful [root@pixelabs ~]# systemctl restart php-fpm
Autoriser HTTP/HTTPS
Nous avons laissé le firewall activé. Il faut donc autoriser le trafic HTTP/80 et HTTPS/443
[root@pixelabs ~]# systemctl status firewalld [root@pixelabs ~]# firewall-cmd --zone=public --permanent --add-service=http [root@pixelabs ~]# firewall-cmd --zone=public --permanent --add-service=https [root@pixelabs ~]# firewall-cmd --reload
Vous pouvez maintenant vérifier le bon fonctionnement du serveur NGINX depuis votre navigateur :
La configuration de base est terminée. Nous allons maintenant configurer un hôte virtuel (site web) sous Nginx.
Ajouter un hôte virtuel
Nous allons copier et sauvegarder le fichier de configuration par défaut afin de revenir en arrière en cas de besoin.
[root@pixelabs ~]# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/pixelabs.conf.old [root@pixelabs ~]# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/pixelabs.conf
Editer le fichier pixelabs.conf :
Rmarque : la définition correctement des blocs serveur est expliqué ici : #root-inside-location-block
Voici un exemple de configuration pour installer le CMS WordPress. Il manque bien sûr des paramètres pour la sécurité et l’optimisation, mais ce n’est qu’un test.
Adaptez par rapport à votre configuration :
server { listen 80; server_name pixelabs.net www.pixelabs.net; root /usr/share/nginx/html/pixelabs.net; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; } location ~ ^/(status|ping)$ { allow 172.16.1.12; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; } }
- Ligne 3 : si vous n’avez pas de serveur DNS, mettez directement l’adresse IP de votre serveur.
- Ligne 39 : normalement c’est localhost (127.0.0.1), mais comme je suis en SSH (depuis une VM Windows 10 sur le même réseau), j’ai dû mettre l’adresse IP du serveur pour tester le PHP-FPM.
Il manque deux blocs serveur dans ce fichier :
- HTTPS pour www.pixelabs.net
- HTTPS pour pixelabs.net
Sans un certificat valide ce n’est pas la peine…
Vérifier la syntaxe de votre configuration :
[root@pixelabs ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@pixelabs ~]#
Si tout va bien, recharger la configuration NGINX :
[root@pixelabs ~]# systemctl reload nginx
Tester le FPM depuis votre navigateur : http://172.16.1.12/status
En cas de problème voir les logs :
[root@pixelabs ~]# tail -f /var/log/nginx/access.log
Ctrl+c pour arrêter.
Installation de WordPress
Télécharger WordPress et uploader le dossier dans le répertoire suivant : /usr/share/nginx/html/pixelabs.net
[root@pixelabs ~]# cd /usr/share/nginx/html/ [root@pixelabs html]# mkdir pixelabs.net [root@pixelabs html]# wget https://fr.wordpress.org/latest-fr_FR.tar.gz [root@pixelabs html]# tar xvf latest-fr_FR.tar.gz [root@pixelabs html]# cd wordpress [root@pixelabs wordpress]# mv * /usr/share/nginx/html/pixelabs.net/
Modifier les permissions :
[root@pixelabs ~]# chown -R nginx:nginx /usr/share/nginx/html/pixelabs.net [root@pixelabs ~]# sudo chmod -R 755 /usr/share/nginx/html/pixelabs.net
Création de la base de données pour WordPress :
[root@pixelabs ~]# mysql -u root -p MariaDB [(none)]> CREATE DATABASE wpdb; Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> MariaDB [(none)]> GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'wppassword'; Query OK, 0 rows affected (0.045 sec) MariaDB [(none)]> MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> MariaDB [(none)]> exit Bye
Allez dans votre navigateur pour lancer l’installation : http://172.16.1.12
Remarque : si WordPress n’arrive pas à créer le fichier de configuration, il va la générer. Il suffit de copier la conf générée et la coller dans le fichier wp-config.php.
Exemple :
[root@pixelabs pixelabs.net]# cp wp-config-sample.php wp-config.php [root@pixelabs pixelabs.net]# nano wp-config.php //Effacer le contenu de ce fichier et remplacez par les données générées par WordPress.
C’est terminé les amis. Vous venez d’installer le serveur LEMP Stack sous Sentos 7 et WordPress avec. La configuration des hôtes virtuels dépend de ce que vous voulez mettre en place sur votre serveur. Pour un CMS comme WordPress par exemple, la configuration doit se faire via Nginx/php/htaccess et la liste est longue :
- Forcer le SSL/HTTPS
- Sécuriser le .htaccess
- Activer la compression gzip
- Activer l’URL Rewriting
- Activer la mise en cache
- Expire headers
- Protéger l’accès à certains fichiers
- Redirection des URLs (301,302…etc)
- …etc.
Bonne journée et à bientôt.
Mise à jour de l’article.
to fix, run :