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

image

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 ou nc échoue → problème de réseau/Docker.