Installation Wordpress sur Nginx en http et https (certificat autosigné)
Mettre le système à jour :
apt update
apt upgrade -y
Installer le serveur web Nginx et le serveur SQL MariaDB, avec PHP
apt install nginx mariadb-server mariadb-client php-fpm php-mysql php-zip php-curl php-xml wget -y
systemctl start nginx
systemctl enable nginx
systemctl start mysqld
systemctl enable mysql
Initialiser MariaDB :
mariadb-secure-installation
Lors de l'exécution de mysql_secure_installation répondez comme suit :
- Enter current password for root (enter for none) : ENTRER
- Switch to unix_socket authentication : Y
- Change the root password : n
- Remove anonymous users : Y
- Disallow root login remotely ? : Y
- Remove test database and access to it ? : Y
- Reload privilege tables now ? : Y
Création de la base de données et de l'utilisateur
mysqladmin -uroot create wordpressdb
mariadb -uroot -e"GRANT ALL ON wordpressdb.* TO admin@localhost IDENTIFIED BY 'P@ssw0rd'"
Téléchargement et installation de Wordpress.
Nous allons utiliser le vhost par défaut de Nginx, dont le root est "/var/www/html"
- Supprimer la page par défaut de Nginx :
rm /var/www/html/index.nginx-debian.html
- Télécharger la dernière version de Wordpress
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
rm latest.tar.gz
- Déplacez le contenu de Wordpress dans "/var/www/html"
cp -r wordpress/* /var/www/html/
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html
cd /var/www/html
Indiquer à Wordpress comment se connecter sa base SQL :
cp wp-config-sample.php wp-config.php
sed -i 's/database_name_here/wordpressdb/' wp-config.php
sed -i 's/username_here/admin/' wp-config.php
sed -i 's/password_here/P@ssw0rd/' wp-config.php
Configuration du vhost par défaut de Nginx
Renommer le fichier de configuration par défaut et en créer un nouveau :
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.BAK
nano /etc/nginx/sites-available/default
Contenu du fichier /etc/nginx/sites-available/default :
server {
listen 80 default_server;
listen [::]:80 default_server;
# Pas besoin de spécifier un server_name si on se contente de l'IP ou du nom local.
# server_name votre_domaine_ou_IP;
# Dossier racine du site
root /var/www/html;
index index.php index.html index.htm;
# Bloc principal : si le fichier demandé n'existe pas, on réécrit vers index.php
location / {
try_files $uri $uri/ /index.php?$args;
}
# Traitement des fichiers PHP via PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
# Vérifiez la version de PHP et le chemin du socket si nécessaire.
}
# Sécurité basique : interdiction d'accès aux fichiers .sql
location ~* \.sql$ {
deny all;
}
error_log /var/log/nginx/wordpress_error.log;
access_log /var/log/nginx/wordpress_access.log;
}
Recharger Nginx :
systemctl reload nginx
Vous pouvez à présent vous connecter à votre navigateur web :
http://IP-SERVEUR
Pour passer votre site de http à https :
- Installer openSSL
apt install openssl
- Créer le répertoire et le certificat autosigné
mkdir /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/wordpress.key \
-out /etc/nginx/ssl/wordpress.crt
Renseignez les champs qui apparaissent ou laissez les vide dans notre cas de figure. Lorsque vous adressez une requête à une autorité de certification, tout doit être rempli. En guise de "Common Name", vous pouvez spécifier le nom de domaine (pour un vrai site web) ou simplement l'adresse IP de votre serveur web (notre cas ici).
- S'assurer que les permissions sont correctes sur le répertoire hébergeant le certificat autosigné et la clef privée
chmod 600 /etc/nginx/ssl/wordpress.key
- Création d'un VirtualHost HTTPS
Nous allons reprendre la configuration effectuée plus haut en y ajoutant le certificat SSL et la clef privée, et en changeant le port d'écoute (80 -> 443). Ouvrez /etc/nginx/sites-available/default
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# Pas besoin de spécifier un server_name si on se contente de l'IP ou du nom local.
# server_name votre_domaine_ou_IP;
# Dossier racine de Wordpress
root /var/www/html;
index index.php index.html index.htm;
ssl_certificate /etc/nginx/ssl/wordpress.crt;
ssl_certificate_key /etc/nginx/ssl/wordpress.key;
# Bloc principal : si le fichier demandé n'existe pas, on réécrit vers index.php
location / {
try_files $uri $uri/ /index.php?$args;
}
# Traitement des fichiers PHP via PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
# Vérifiez la version de PHP et le chemin du socket si nécessaire.
}
# Sécurité basique : interdiction d'accès aux fichiers .sql
location ~* \.sql$ {
deny all;
}
error_log /var/log/nginx/wordpress_error.log;
access_log /var/log/nginx/wordpress_access.log;
}
Recharger Nginx :
systemctl reload nginx
↑ Haut de page