Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« HTTPD » : différence entre les versions

De The Linux Craftsman
mAucun résumé des modifications
 
(83 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{|border=1 class="wikitable"
Cette page rassemble tous les articles concernant le serveur Apache httpd :
! !! HTTP !! HTTPS
|-align="center"
| '''Protocole''' || tcp || tcp
|-align="center"
| '''Port''' || 80 || 443
|-align="center"
| '''Configuration Iptables''' || iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT || iptables -I INPUT 2 -p tcp --dport 443 -j ACCEPT
|}


= Préparation =
# [[httpd_install_start| Installation et premier démarrage ]]
 
# [[httpd_vhost| Déploiement d'un hôte virtuel]]
Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un serveur DNS et désactiver SELinux.
# [[httpd_htaccess | Le fichier .htaccess ]]
 
# [[httpd_redirect_reverse-proxy_mod-rewrite| Redirections, réécriture d’URL (mod_rewrite)]]
Pour ceux qui auraient manqué des étapes les voici:
# [[httpd_certificate_security | Certificats et sécurité ]]
* [[resolv.conf|Configuration du client DNS]]
* [[ifcfg-ethX|Paramétrer sa carte réseau]]
* [[SELinux|Désactiver SELinux]]
 
Une fois ces étapes effectuées, entrons dans le vif du sujet !
 
= Installation =
 
== HTTP ==
 
<pre>
# yum -y install httpd
</pre>
 
== HTTP '''et''' HTTPS ==
<pre>
# yum -y install httpd mod_ssl
</pre>
 
= Configuration de base =
 
== Avant le premier démarrage ==
 
Tout d'abord il faut paramétrer le nom de la machine ainsi que l'adresse d'écoute
 
Pour cela cherchez dans le fichier ''/etc/httpd/conf/httpd.conf'' les lignes commençant par :
 
* Listen 80
* #ServerName www.example.com:80
 
La première doit contenir l'adresse IP de la machine ou ''*'' pour que ''httpd'' écoute sur toutes les interfaces
 
<source lang="apache">
Listen *:80
</source>
 
La deuxième doit être cohérente avec le nom de la machine qui est précisé dans le fichier [[Sysconfig-network|''network'']]
 
<source lang="apache">
ServerName web:80
</source>
 
== Premier démarrage ==
 
Maintenant on peut démarrer ''httpd''
 
<pre>
# service httpd start
Démarrage de httpd :                                      [ OK  ]
</pre>
 
== Vérification ==
 
On peut vérifier que ''httpd'' écoute sur la bonne adresse et les bons ports
 
<pre>
# netstat -atnp | grep httpd
tcp        0      0 :::80                      :::*                        LISTEN      1202/httpd
tcp        0      0 :::443                      :::*                        LISTEN      1202/httpd
</pre>
 
== Enregistrement dans le chargeur de démarrage ==
 
<pre>
# chkconfig httpd on
</pre>
 
= Ajout d'une page html =
 
Le dossier de travail de ''httpd'' est précisé grâce à la variable ''DocumentRoot'' qui a la valeur ''/var/www/html''
 
Vous pouvez donc créer votre premier site web en ajoutant dans ce dossier le fichier désigné par la variable ''DirectoryIndex'' (généralement ''index.html'')
 
<pre>
# vi /var/www/html/index.html
</pre>
 
Une fois le fichier édité, il ne faut pas oublier de repositionner les bons droits pour qu'apache soit apte à le lire
 
<pre>
# chown apache.apache -R /var/www/html
</pre>
 
= Parcours des logs =
{{#lst:Les_logs|log_httpd}}
== favicon.ico ?? ==
 
Quand on parcourt le fichier ''access_log'' on peut croiser la ligne suivante
 
<pre>
192.168.200.12 - - [28/Dec/2013:19:58:13 +0100] "GET /favicon.ico HTTP/1.1" 404 278 "-" "Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0"
</pre>
 
Et on peut se demander pourquoi le navigateur demande favicon.ico ?? En fait, il s'agit de l'icône qui figure dans l'onglet, à côté du titre
 
[[Fichier:fireforx_favicon_tab.png]] &rarr; [[Fichier:favicon_tlc.png]]
 
Vous pouvez la générer grâce au site suivant [http://www.favicon.cc/ www.favicon.cc] et la placer à la racine du site web (''/var/www/html'')
 
= Fonction Virtual Host =
 
La fonction Vhost permet de faire tourner plusieurs sites Web différents sur un même serveur. Les moyens de différenciation sont multiples:
* le port TCP
* l'adresse IP
* le nom DNS
* un sous-ensemble de ces trois éléments
 
== Emplacement du fichier de configuration ==
 
Les fichiers de configuration de ''httpd'' se trouvent dans le dossier ''/etc/httpd/conf.d''
 
<pre>
# ll /etc/httpd/conf.d/
total 20
-rw-r--r--. 1 root root  392 13 août  19:28 README
-rw-r--r--. 1 root root 9473  2 août  13:59 ssl.conf
-rw-r--r--. 1 root root  299  2 août  13:59 welcome.conf
</pre>
 
Ces fichiers sont ''importés'' dans la configuration de ''httpd'' grâce à la directive ''Include'' présente dans le fichier ''httpd.conf''
 
<pre>
Include conf.d/*.conf
</pre>
 
Nous allons donc créer un fichier spécifique pour nos VHost que nous appellerons ''vhost.conf''
 
<pre>
# touch /etc/httpd/conf.d/vhost.conf
</pre>
 
== VHost par ports TCP ==
 
Ce choix permet avec une seule adresse IP d'avoir plusieurs sites qui sont accessibles sur des ports différents. C'est généralement le cas quand on veut installer des interfaces d'administration.
 
Tout d'abord le serveur ''httpd'' doit écouter sur les ports en question
 
<source lang="apache">
Listen 80 # Ne pas ajouter si déjà dans httpd.conf
Listen 8080
ServerName www.tala-informatique.fr
</source>
 
Ensuite les VHost possèderont une directive ''VirtualHost'' différente
 
<source lang="apache">
<VirtualHost *:80>
    DocumentRoot /var/www/html/public
</VirtualHost>
 
<VirtualHost *:8080>
    DocumentRoot /var/www/html/admin
</VirtualHost>
</source>
 
== VHost par adresses IP ==
 
=== Des contenus différents ===
 
Ce choix est inintéressant quand le serveur Web possède deux cartes réseaux sur deux réseaux différents (vers Internet et vers l'intranet).
 
Tout d'abord on déclare un serveur ''httpd'' principal et cette configuration est généralement déjà dans ''httpd.conf''.
 
<source lang="apache">
Listen 192.168.200.251:80
DocumentRoot /var/www/html/
ServerName www.tala-informatique.fr
</source>
 
Ensuite le VHost possèdera une directive ''VirtualHost'' différente
 
<source lang="apache">
<VirtualHost 192.168.200.250:80>
    DocumentRoot /var/www/html/intranet
</VirtualHost>
</source>
 
=== Le même contenu ===
 
Le serveur web peut avoir plusieurs interfaces, sur des réseaux différents, et en plus une interface d'administration sur laquelle on ne veut pas que ''httpd'' écoute.
 
Tout d'abord le serveur ''httpd'' doit écouter sur le port TCP/80 (en général)
 
<source lang="apache">
Listen *:80
</source>
 
Puis on précise les interfaces d'écoute
 
<source lang="apache">
<VirtualHost 192.168.200.250 192.168.200.251>
    DocumentRoot /var/www/html/intranet
    ServerName www.tala-informatique.fr
</VirtualHost>
</source>
 
== VHost par noms DNS ==
 
C'est le type le plus courant de VHost. En effet, le plus souvent les gens ne possèdent qu'une seule adresse IP publique et il est donc plus simple de faire ''pointer'' plusieurs noms de domaine vers la même adresse.
 
Tout d'abord le serveur ''httpd'' doit écouter sur le port TCP/80 (en général) mais cette fois-ci on doit lui spécifier que l'on va utiliser des VHost par nom. Pour cela on utilise la directive ''NameVirtualHost'' soit:
* en utilisant un nom différent de celui utilisé pour les VHost (c'est le cas dans cet exemple)
* soit en utilisant une adresse IP
 
<source lang="apache">
NameVirtualHost web.tala-informatique.fr:80
</source>
 
''web.tala-informatique.fr'' = ''www.tala-informatique.fr'' = ''wiki.tala-informatique.fr'' = une adresse IP
 
Ensuite les VHost possèderont une variable ''ServerName'' différente
 
<source lang="apache">
<VirtualHost web.tala-informatique.fr:80>
    DocumentRoot /var/www/html/informatique
    ServerName www.tala-informatique.fr
</VirtualHost>
 
<VirtualHost wiki.tala-informatique.fr:80>
    DocumentRoot /var/www/html/wiki
    ServerName wiki.tala-informatique.fr
</VirtualHost>
</source>
 
= Le fichier ''.htaccess'' =
Les fichiers ''.htaccess'' sont des fichiers de configuration d'Apache, permettant de définir des règles dans un répertoire et dans tous ses sous-répertoires.
== Possibilités ==
Les principales raisons d'utilisation des fichiers .htaccess sont :
*gérer l'accès à certains fichiers;
*ajouter un mime-type;
*protéger l'accès à un répertoire ou un fichier par un mot de passe;
*définir des pages d'erreurs personnalisées.
 
== Principe==
Le fichier ''.htaccess'' est placé dans le répertoire dans lequel il doit agir. Il agit ainsi sur les permissions du répertoire qui le contient et sur tous ses sous-répertoires.
 
Vous pouvez placer un autre fichier ''.htaccess'' dans un sous-répertoire d'un répertoire déjà contrôlé par un fichier ''.htaccess''. Le fichier .htaccess du répertoire parent reste en « activité » tant que les fonctionnalités n'ont pas été réécrites.
 
== Exemples d'utilisation ==
<B>Avant d'aller plus loin, assurez-vous qu'''Apache'' lise les ''.htaccess'' en passant la directive ''AllowOverride'' de ''None'' à ''All'' dans le fichier ''/etc/httpd/conf.d/httpd.conf''</B>
=== Bloquer l'accès à des ressources ===
Un fichier .htaccess est composé de deux sections :
* une première qui contient les chemins vers les fichiers contenant les définitions de groupes et d'utilisateurs;
* une deuxième qui précise les conditions d'accès.
<pre>
# Définition
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /repertoire/de/votre/fichier/.FichierDeGroupe
AuthName "Accès protégé"
AuthType Basic
#Conditions d'accès
Require valid-user
</pre>
*''AuthUserFile'' définit le chemin d'accès absolu vers le fichier de mot de passe;
*''AuthGroupFile'' définit le chemin d'accès absolu vers le fichier de groupe;
*''AuthName'' entraîne l'affichage dans le navigateur Internet de : « Tapez votre nom d'utilisateur et votre mot de passe. Domaine: "Accès protégé" »;
*''AuthType'' Basic précise qu'il faut utiliser AuthUserFile pour l'authentification;
*''Require valid-user'' précise que l'on autorise uniquement les personnes identifiées. Il est possible de préciser le nom des personnes autorisées : ''Require user {username}''
 
= Astuces =
== Redirections ==
Vous vous demandez comment rediriger les âmes égarées qui se retrouvent à la racine de votre serveur Web...
 
Dans le fichier ou vous avez déclaré vos ''Vhost'' il vous suffit d'ajouter la ligne suivante:
<pre>
RedirectMatch ^/$ /wiki/
</pre>
Comme cela, lorsque l'on arrive à la racine ''/'' (''^/$'' &rarr; ''^'' signifie ''début de ligne'' et ''$'' fin de ligne) on est redirigé vers ''/wiki/''.
 
== Certificat auto-signé ==
 
C'est la première chose que les utilisateurs vont voir lorsqu'ils se connectent à votre site, alors autant en prendre soin. On n'est pas en confiance lorsque l'on se connecte à un serveur qui fait parti de l'entreprise ''SomeOrganization'' et du département ''SomeOrganizationUnit''... On va remédier à cela !
 
=== Génération ===
Pour ce faire, nous allons utiliser ''openssl'' et notamment la commande suivante:
<pre>
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout www.tala-informatique.fr.key -out www.tala-informatique.fr.crt
Generating a 2048 bit RSA private key
...............+++
..........................................+++
writing new private key to 'www.tala-informatique.fr.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Herault
Locality Name (eg, city) [Default City]:Juvignac
Organization Name (eg, company) [Default Company Ltd]:Tala
Organizational Unit Name (eg, section) []:Informatique
Common Name (eg, your name or your server's hostname) []:www.tala-informatique.fr
Email Address []:tala.informatique@gmail.fr
</pre>
 
=== Utilisation de la clé et du certificat ===
Il faut maintenant les faire utiliser par Apache, ce qui se fait dans le fichier où vous avez déclaré vos hôtes virtuels.
 
<pre>
...
 
SSLEngine on
SSLCertificateFile /opt/ssl/www.tala-informatique.fr.crt
SSLCertificateKeyFile /opt/ssl/www.tala-informatique.fr.key
 
...
</pre>
 
On n’oublie pas de donner les droits à Apache:
<pre>
# chown -R apache. /opt/ssl
</pre>
 
=== Automatisation ===
Maintenant nous allons faire un script Shell, que j'ai nommé ''gen_ssl_tokens.sh'', pour automatiser tout cela:
<source lang="bash">
#!/bin/bash
 
###########################
# Key name
KEY=valhalla.tala-informatique.fr.key
# Cert name
CRT=valhalla.tala-informatique.fr.crt
# Validity period
VALIDITY=365
# Destination directory
DST_DIR="/opt/ssl"
###########################
 
echo -n "Generating key and certificate: "
openssl req -x509 -nodes -days ${VALIDITY} -newkey rsa:2048 -keyout ${KEY} -out ${CRT} << EOF
FR
Herault
Juvignac
Tala
Informatique
www.tala-informatique.fr
tala.informatique.fr
 
EOF
 
echo ""
echo "ok."
 
echo -n "Copying key and certificate: "
mv -f ${KEY} ${DST_DIR}/
mv -f ${CRT} ${DST_DIR}/
echo "ok."
 
echo -n "Giving rights to Apache: "
chown -R apache. ${DST_DIR}
echo "ok."
</source>
 
On n'aura plus qu'à lancer le script pour générer automatiquement la clé et le certificat pour le renouvellement !

Dernière version du 31 mai 2026 à 12:13