{"id":50504259,"url":"https://github.com/paul-schuhm/architecture-web","last_synced_at":"2026-06-02T14:30:22.137Z","repository":{"id":352643924,"uuid":"1215837616","full_name":"paul-schuhm/architecture-web","owner":"paul-schuhm","description":"Supports de cours sur l'achitecture d'internet, du web et serveur Apache","archived":false,"fork":false,"pushed_at":"2026-04-20T13:35:37.000Z","size":2,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T15:37:46.149Z","etag":null,"topics":["apache2","protocoles-fondamentaux","serveur","ssh-server","tcp","vm","web"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paul-schuhm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-20T09:54:41.000Z","updated_at":"2026-04-20T14:19:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/paul-schuhm/architecture-web","commit_stats":null,"previous_names":["paul-schuhm/architecture-web"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/paul-schuhm/architecture-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Farchitecture-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Farchitecture-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Farchitecture-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Farchitecture-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paul-schuhm","download_url":"https://codeload.github.com/paul-schuhm/architecture-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Farchitecture-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33827062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache2","protocoles-fondamentaux","serveur","ssh-server","tcp","vm","web"],"created_at":"2026-06-02T14:30:21.267Z","updated_at":"2026-06-02T14:30:22.130Z","avatar_url":"https://github.com/paul-schuhm.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# architecture-web\n\n- [architecture-web](#architecture-web)\n  - [Objectifs](#objectifs)\n  - [Programme](#programme)\n  - [Fonctionnement d'Internet](#fonctionnement-dinternet)\n  - [Serveur web Apache](#serveur-web-apache)\n    - [TP 1 : Apache 2, first steps](#tp-1--apache-2-first-steps)\n      - [Extension du TP](#extension-du-tp)\n    - [Réécriture d'URL](#réécriture-durl)\n  - [Unix](#unix)\n    - [Installation et configuration sécurisée d'un serveur SSH](#installation-et-configuration-sécurisée-dun-serveur-ssh)\n    - [Exercices](#exercices)\n      - [Exercice 1 : Apprivoiser un éditeur de texte](#exercice-1--apprivoiser-un-éditeur-de-texte)\n      - [Exercice 2 : se créer ses commandes avec des alias (man, ls, cut, grep, tr)](#exercice-2--se-créer-ses-commandes-avec-des-alias-man-ls-cut-grep-tr)\n  - [Git, first steps](#git-first-steps)\n  - [Références](#références)\n  - [Ressources connexes](#ressources-connexes)\n\n## Objectifs\n\nMaîtriser les environnements d'hébergements web sous GNU/Linux et savoir administrer un système GNU/Linux pour le web.\n\n## Programme\n\n- Rappels sur le fonctionnement des réseaux et d'Internet (design, protocoles et matériel)\n- Fonctionnement du protocole TCP\n- Présentation de Debian\n- Mise en place d'une machine virtuelle Debian avec publication de ports\n- Initiation à la philosophie des systèmes UNIX\n- Administration de base sur GNU/Linux :\n  - Utiliser les commandes de base du *shell* (rappels)\n  - Créer des alias et utiliser `.bashrc`\n  - Utiliser un éditeur de texte (nano, vi(m) ou emacs)\n  - Créer un utilisateur\n  - Comprendre et gérer correctement les droits sur les fichiers\n  - Gérer les paquets avec `apt` (mise à jour, installation/suppression)\n  - Installer et configurer un serveur SSH\n  - Sécuriser une connexion SSH (usage de clés de chiffrement)\n  - Installer et configurer le serveur web Apache 2\n  - Savoir utiliser les services de `systemd` (démarrage, arrêt, status, *enabled/disabled*)\n  - Afficher les sockets\n  - Scanner les ports\n- Introduction à Git et Github\n- Déploiement de clé publique sur Github\n- Déploiement manuel d'un site/application web avec git et un dépôt *remote*\n- Fonctionnement d'Apache :\n  - Configurations d'Apache (principale, par site, `.htaccess`)\n  - Mise en place d'un site web (activer/désactiver)\n  - Les *Virtual Host*\n  - Mise en place de plusieurs sites web\n  - Les directives principales\n  - Mise en place d'un site web PHP avec le module Apache\n  - La réécriture d'URL avec le module `mod_rewrite`\n  - Installation et usage d'un certificat TLS\n\n## Fonctionnement d'Internet\n\n- Parcours d'une requête HTTP sur Internet\n- [Consulter le glossaire (protocoles, matériel, modèle OSI et couches, etc.)](./glossaire.md) associé\n\n## Serveur web Apache\n\n### TP 1 : Apache 2, first steps\n\n[Apache HTTP Server : guide pratique (vhosts, TLS, performances) : *Servir un site statique avec Apache*](https://blog.stephane-robert.info/docs/services/web/apache/#servir-un-site-statique), de [Stéphane Robert](https://blog.stephane-robert.info/). **Réaliser le TP** jusqu'à [Activer HTTPS avec Let’s Encrypt](https://blog.stephane-robert.info/docs/services/web/apache/#activer-https-avec-lets-encrypt) (exclus).\n\n#### Extension du TP\n\n1. Comment Apache sait quel site afficher quand j’ai plusieurs domaines et plusieurs sites web ?\n2. Comment tester le fonctionnement de ma configuration multisite avec le client cURL ?\n3. Que fait la commande `sudo chown -R www-data:www-data /var/www/monsite` ? Qui est l'utilisateur `www-data` ?\n4. A quoi sert la directive suivante :\n\n~~~\n    \u003cDirectory /var/www/monsite\u003e\n        Options -Indexes +FollowSymLinks\n        AllowOverride None\n        Require all granted\n    \u003c/Directory\u003e\n~~~\n\n5. Que fait la commande `sudo apache2ctl configtest` ?\n6. Que signifie la directive `\u003cVirtualHost *:80\u003e` ?\n7. A quoi sert la directive `ServerName` ?\n8. Peut-on *surcharger* (*override*) une configuration d'un site web avec Apache ? Si oui, comment ?\n9. A quoi sert le programme `apache2ctl` ?\n10. A quoi servent les directives `\u003cDirectory\u003e`, `\u003cFiles\u003e` et `\u003cFilesMatch\u003e`. Où se placent-elles ?\n11. Apache enregistre des *logs* (activité du site et erreurs du serveur). Où les trouvent-on ? Inspecter les avec `cat`. Monitorer les logs en temps réel avec `tail -f /path/vers/fichier_log`.\n\n\u003e N'hésitez pas à [utiliser la documentation très complète](https://httpd.apache.org/docs/current/) (et traduite en français) d'Apache pour vous former, confirmer ou vérifier des informations. La documentation offre des guides, des conseils (sécurité, etc.), des exemples ainsi que la référence de toutes les directives.\n\n### Réécriture d'URL\n\n[Consulter la documentation officielle](https://httpd.apache.org/docs/current/fr/rewrite/intro.html)\n\n1. À quoi sert la réécriture d'URL ? Peut-elle être placée dans un fichier .htacess ?\n2. Comment *activer* le module `rewrite` et vérifier qu'il est bien installé ?\n3. A l'aide des directives d'Apache de réécriture d'URL, implémenter les URL suivantes :\n   1. Client : `/ancien-contact` réécrite en `/ancien-contact.html`\n   2. Client : `/a-propos.html` réécrite en `/a-propos.php`\n   3. Client : `/article-42` réécrite en `/article.php?id=42`, où `id` est un entier positif\n   4. Client : `/article-42` réécrite en `article.php?id=42` **uniquement** si le fichier `article.php` **existe** sur le serveur\n\n4. À quoi servent les *flags* suivants :\n   1. [L]\n   2. [R]\n   3. [NC]\n   4. [QSA]\n   5. [F]\n\n\u003c!-- \n\nRéponses aux question :\n\n1. RewriteRule ^ancien-contact$ ancien-contact.html [L]\n2. RewriteRule ^a-propos\\.html$ a-propos.php [L], si l'utilisateur tape` monsite.com/a-propos.html`, le serveur va chercher silencieusement le fichier `a-propos.php` sans changer l'adresse dans la barre du navigateur.\n3. RewriteRule ^article-([0-9]+)$ article.php?id=$1 [L,QSA]\n4. # On vérifie si le fichier article.php existe sur le disque\n    RewriteCond %{DOCUMENT_ROOT}/article.php -f\n    # Si oui, on traite la demande\n    RewriteRule ^article-([0-9]+)$ article.php?id=$1 [L,QSA]\n\n\nFlags :\n\nL : Last. Dernière règle de réécriture appliquée\nR : Redirect (temporaire par défaut, 302) [R=301] pour rediriger de manière permanente\nNC : Ignore la case (case insensitive) pour le pattern matchin\nQSA : QueryStringAppend : Quand l'URI de remplacement contient une chaîne de requête, le comportement par défaut de la règle RewriteRule est de supprimer la query string (il s'agit des paramètres éventuellement passés dans l'URL après le caractère ?, usuellement pour les formulaires traités par la méthode HTTP GET) existante, et de la remplacer par celle nouvellement créée. Avec le drapeau [QSA], les chaînes de requête peuvent être combinées. Garder ancienne query string + ajouter la votre\nF : Forbidden. envoyer par le serveur au client un code de statut \"403 Forbidden\". Le même effet peut être obtenu à l'aide de la directive Deny, mais ce drapeau offre plus de souplesse dans l'attribution d'un statut Forbidden. Ex: RewriteRule \"\\.exe\"   \"-\" [F]\n --\u003e\n\n\u003e Utiliser l'excellent site [Regexr](https://regexr.com/) pour tester vos expressions régulières et réviser les éléments de syntaxe des expressions.\n\n## Unix\n\n### Installation et configuration sécurisée d'un serveur SSH\n\n[Consulter et suivre le guide](https://ftp.pschuhmacher.com/unix/guide-serveur-ssh.html)\n\n### Exercices\n\n#### Exercice 1 : Apprivoiser un éditeur de texte\n\nPour travailler sur des serveurs GNU/Linux, il est **indispensable de maîtriser les bases d'un éditeur de texte dans le shell**.\n\n**Choisissez** un éditeur de texte parmi `nano`, `vim` ou `emacs` et **réalisez un/son tutoriel** pour apprendre les bases : **créer**, **parcourir** et **éditer** un fichier, faire une **recherche** par *pattern*.\n\n- nano : `man nano`, liste des commandes `Ctr+ G` ;\n- vim : `vimtutor`\n- emacs : emacs, puis `Ctr + h t`\n\n\u003e L'avantage de `nano` et de `vi`(m), c'est qu'**ils sont installés par défaut** sur toutes les distributions GNU/Linux. Ainsi, si vous de disposez pas des privilèges pour installer un autre éditeur de texte, vous êtes en mesure de travailler sereinement.\n\n#### Exercice 2 : se créer ses commandes avec des alias (man, ls, cut, grep, tr)\n\n0. **Inspecter** la sortie de `man -f ls cut grep tr` pour savoir ce que fait chaque commande;\n1. **Créer** un alias `lls` qui affiche la liste longue triée par taille décroissante (en utilisant `ls -l`);\n2. **Créer** un alias `dirs` qui n’affiche que les répertoires du répertoire courant (en utilisant `ls`, `grep` ou `cut`);\n3. **Créer** un alias `big` qui affiche uniquement les 5 plus gros fichiers du répertoire courant;\n4. **Créer** un alias `owners` qui affiche uniquement propriétaire et nom de fichier (en utilisant `ls`, `cut` et `tr`);\n5. **Enregistrer** ces alias dans votre fichier `~/.bash_aliases`.\n\n\u003e Conseil : dès que vous rencontrez un nouveau programme/commande, utiliser le manuel `man \u003cnouveau programme\u003e`. Apprenez à utiliser `man` (navigation, recherche par *pattern* pour retrouver rapidement une option)\n\n## Git, first steps\n\n~~~bash\n#installer\napt install git\n#créer un dépôt\ngit init\n#configurer git\ngit config --global user.name \"votre name\"\ngit config --global user.emaim \"votre emails\"\ngit config --global core.editor \"votre éditeur préféré\"\n#vérifier la configuration\ngit config --list\n#éditer la configuration\ngit config --global --edit\n#renommer branche 'master' en 'main'\ngit branch --move master main\n#lister les branches\ngit branch\n#préparer un commit\ngit add\n#faire un commit\ngit commit -m \"message\"\n#inspecter\ngit status\ngit log\n~~~\n\n## Références\n\n\u003e Ouvrages recommandés !\n\n- [Les réseaux de zéro : comprendre les réseaux par la pratique](https://www.editions-eyrolles.com/livre/les-reseaux-de-zero), publié chez Eyrolles, par Vincent Sénétaire, Jean-Manassé Pouabou, 2022. **Excellent ouvrage**, LP++\n- [TCP/IP Network Administration](https://www.oreilly.com/library/view/tcp-ip-network-administration/0596002971/), publié chez O'Reilly, par Craig Hunt, 2002. LP+\n\n## Ressources connexes\n\n- [Glossaire](./glossaire.md) : définition des protocoles, modèle OSI, matériel, etc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-schuhm%2Farchitecture-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaul-schuhm%2Farchitecture-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-schuhm%2Farchitecture-web/lists"}