TP5 : service web public - PasRP-Theo/Admin-II GitHub Wiki
Configuration d'un serveur web nginx
1. Configuration de base
1.1 Page par défaut
La page par défaut de nginx s'affiche lorsqu'on accède au site www.l2-2.ephec-ti.be
1.2 Configuration
Dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
nginx.conf
events {
worker_connections 1024;
}
http {
# Log configuration
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
# Performance settings
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
client_max_body_size 10M;
keepalive_timeout 65;
# Main server block
server {
listen 80;
server_name www.l2-2.ephec-ti.be;
index index.html;
root /var/www/monsite/html/;
}
}
1.3 Déploiement
docker run -d --name nginx-web-svr -p 80:80 --mount type=bind,source="$(pwd)"/monsite/html/,target=/var/www/monsite/html/ custom-nginx:latest
2. Virtual Hosting
2.1 Configuration du blog
Ajout dans nginx.conf:
server {
listen 80;
server_name blog.l2-2.ephec-ti.be;
index index.html;
root /var/www/monblog/html/;
}
Note: Rebuild l'image après modification du nginx.conf
2.2 Déploiement avec virtual hosts
docker run -d --name nginx-web-svr -p 80:80 \
--mount type=bind,source="$(pwd)"/monsite/html/,target=/var/www/monsite/html/ \
--mount type=bind,source="$(pwd)"/monblog/html/,target=/var/www/monblog/html/ \
custom-nginx:latest
2.3 Configuration DNS
blog 3600 IN CNAME www.l2-2.ephec-ti.be. ; Alias
2.4 URLs
- Site principal: http://www.l2-2.ephec-ti.be/
- Blog: http://blog.l2-2.ephec-ti.be/
3. Logging
Les logs montrent les accès aux différents virtual hosts:
host: "blog.l2-2.ephec-ti.be"
host: "www.l2-2.ephec-ti.be"
Procédure de validation pour s’assurer que le site web est bien connecté à la base de données
Pour vérifier que votre site web (PHP/Nginx) communique correctement avec la base de données MariaDB, vous devez tester plusieurs aspects de la connexion. Voici une procédure méthodique pour valider cette communication.
1. Test de connexion basique depuis le conteneur PHP
But : Vérifier que le conteneur PHP peut établir une connexion avec MariaDB.
Méthode :
Dans le conteneur PHP, exécutez un script de test simple :
<?php
$host = 'mariadb'; // Nom du conteneur ou adresse IP de MariaDB
$user = 'root'; // Ou un utilisateur spécifique
$pass = 'password'; // Remplacez par le bon mot de passe
$dbname = 'nom_de_la_base';
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("Échec de la connexion : " . $conn->connect_error);
} else {
echo "Connexion réussie à la base de données!";
}
?>
Validation :
- Placez ce script dans
/var/www/html/test_db.php
- Accédez-y via
http://votre-site/test_db.php
- Résultat attendu :
- Succès → "Connexion réussie à la base de données!"
- Échec → Affiche un message d'erreur indiquant le problème (mauvaise configuration, problème réseau, accès refusé, etc.).
2. Vérification de la connexion depuis la ligne de commande dans le conteneur PHP
But : Tester la connexion manuellement pour éliminer d’éventuels problèmes liés à PHP.
Méthode :
Ouvrir un shell sur le conteneur PHP :
docker exec -it mon-conteneur-php bash
Puis, installer le client MariaDB si ce n'est pas déjà fait :
apt update && apt install mariadb-client -y
Testez la connexion :
mysql -h mariadb -u root -p
Puis entrez le mot de passe.
Validation :
- Si la connexion fonctionne, vous pourrez exécuter
SHOW DATABASES;
pour voir la liste des bases disponibles.
3. Vérification de l’accès aux données
But : Tester si le site peut récupérer des données de la base.
Méthode :
Ajoutez un script PHP pour interroger la table products
:
<?php
$host = 'mariadb';
$user = 'root';
$pass = 'password';
$dbname = 'nom_de_la_base';
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("Échec de la connexion : " . $conn->connect_error);
}
$sql = "SELECT * FROM products";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Nom: " . $row["name"]. " - Prix: " . $row["price"]. "<br>";
}
} else {
echo "Aucun produit trouvé.";
}
?>
Accédez à http://votre-site/test_fetch.php
.
Validation :
- Si les produits s'affichent correctement → connexion OK.
- Si erreur
Access Denied
→ problème de droits. - Si
Aucun produit trouvé.
→ la connexion est bonne mais la table est vide.
4. Tests réseau entre conteneurs
But : Vérifier si PHP peut atteindre MariaDB via Docker.
Méthode :
Depuis le conteneur PHP, faites un ping
vers le conteneur de MariaDB :
docker exec -it mon-conteneur-php ping mariadb
Testez aussi la connexion au port 3306 :
docker exec -it mon-conteneur-php nc -zv mariadb 3306
Validation :
- Si
ping
ounc
échoue → problème de réseau/Docker.