|
|
Ligne 1 : |
Ligne 1 : |
− | <seo title="Installer Apache HTTPD sur CentOS" metak="centos6,httpd,apache,ssl,let's encrypt" />
| |
− |
| |
| {|border=1 class="wikitable" | | {|border=1 class="wikitable" |
| ! !! HTTP !! HTTPS | | ! !! HTTP !! HTTPS |
Ligne 48 : |
Ligne 46 : |
| La première doit contenir l'adresse IP de la machine ou ''*'' pour que ''httpd'' écoute sur toutes les interfaces | | La première doit contenir l'adresse IP de la machine ou ''*'' pour que ''httpd'' écoute sur toutes les interfaces |
| | | |
− | <source lang="apache"> | + | <pre> |
| Listen *:80 | | Listen *:80 |
− | </source> | + | </pre> |
| | | |
| La deuxième doit être cohérente avec le nom de la machine qui est précisé dans le fichier [[Sysconfig-network|''network'']] | | 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"> | + | <pre> |
| ServerName web:80 | | ServerName web:80 |
− | </source> | + | </pre> |
| | | |
| == Premier démarrage == | | == Premier démarrage == |
Ligne 100 : |
Ligne 98 : |
| | | |
| = Parcours des logs = | | = Parcours des logs = |
− | {{#lst:Les_logs|log_httpd}}
| + | |
| + | ''httpd'' log dans le répertoire ''/var/log/httpd/'' et utilise deux fichiers: |
| + | *''access_log'' → pour journaliser tous les accès |
| + | *''error_log'' → pour journaliser toutes les erreurs |
| + | |
| == favicon.ico ?? == | | == favicon.ico ?? == |
| | | |
Ligne 114 : |
Ligne 116 : |
| | | |
| 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'') | | 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'') |
− | === Plusieurs Vhosts et une seule favicon ===
| |
− | Si vous désirez une ''favicon'' pour plusieurs vhost, utilisez des alias:
| |
− | <source lang="apache">
| |
− | <Location "/favicon.ico">
| |
− | SetHandler none
| |
− | </Location>
| |
− |
| |
− | Alias /favicon.ico /var/www/html/favicon.ico
| |
− | </source>
| |
− |
| |
− | === Favicon pas dans la DocumentRoot ===
| |
− | Si votre ''favicon'' n'est pas dans la ''DocumentRoot'' (directive d'Apache) de votre site web, il faudra la rendre exécutable pour qu'Apache puisse la servir
| |
− | <pre>
| |
− | # chmod +x /chemin/vers/favicon.ico
| |
− | </pre>
| |
| | | |
| = Fonction Virtual Host = | | = Fonction Virtual Host = |
Ligne 168 : |
Ligne 155 : |
| Tout d'abord le serveur ''httpd'' doit écouter sur les ports en question | | Tout d'abord le serveur ''httpd'' doit écouter sur les ports en question |
| | | |
− | <source lang="apache"> | + | <pre> |
| Listen 80 # Ne pas ajouter si déjà dans httpd.conf | | Listen 80 # Ne pas ajouter si déjà dans httpd.conf |
| Listen 8080 | | Listen 8080 |
| ServerName www.tala-informatique.fr | | ServerName www.tala-informatique.fr |
− | </source> | + | </pre> |
| | | |
| Ensuite les VHost possèderont une directive ''VirtualHost'' différente | | Ensuite les VHost possèderont une directive ''VirtualHost'' différente |
| | | |
− | <source lang="apache"> | + | <pre> |
| <VirtualHost *:80> | | <VirtualHost *:80> |
| DocumentRoot /var/www/html/public | | DocumentRoot /var/www/html/public |
Ligne 184 : |
Ligne 171 : |
| DocumentRoot /var/www/html/admin | | DocumentRoot /var/www/html/admin |
| </VirtualHost> | | </VirtualHost> |
− | </source> | + | </pre> |
| | | |
| == VHost par adresses IP == | | == VHost par adresses IP == |
Ligne 194 : |
Ligne 181 : |
| Tout d'abord on déclare un serveur ''httpd'' principal et cette configuration est généralement déjà dans ''httpd.conf''. | | 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"> | + | <pre> |
| Listen 192.168.200.251:80 | | Listen 192.168.200.251:80 |
| DocumentRoot /var/www/html/ | | DocumentRoot /var/www/html/ |
| ServerName www.tala-informatique.fr | | ServerName www.tala-informatique.fr |
− | </source> | + | </pre> |
| | | |
| Ensuite le VHost possèdera une directive ''VirtualHost'' différente | | Ensuite le VHost possèdera une directive ''VirtualHost'' différente |
| | | |
− | <source lang="apache"> | + | <pre> |
| <VirtualHost 192.168.200.250:80> | | <VirtualHost 192.168.200.250:80> |
| DocumentRoot /var/www/html/intranet | | DocumentRoot /var/www/html/intranet |
| </VirtualHost> | | </VirtualHost> |
− | </source> | + | </pre> |
| | | |
| === Le même contenu === | | === Le même contenu === |
Ligne 214 : |
Ligne 201 : |
| Tout d'abord le serveur ''httpd'' doit écouter sur le port TCP/80 (en général) | | Tout d'abord le serveur ''httpd'' doit écouter sur le port TCP/80 (en général) |
| | | |
− | <source lang="apache"> | + | <pre> |
− | Listen *:80 | + | Listen 80 |
− | </source> | + | </pre> |
| | | |
| Puis on précise les interfaces d'écoute | | Puis on précise les interfaces d'écoute |
| | | |
− | <source lang="apache"> | + | <pre> |
| <VirtualHost 192.168.200.250 192.168.200.251> | | <VirtualHost 192.168.200.250 192.168.200.251> |
| DocumentRoot /var/www/html/intranet | | DocumentRoot /var/www/html/intranet |
| ServerName www.tala-informatique.fr | | ServerName www.tala-informatique.fr |
| </VirtualHost> | | </VirtualHost> |
− | </source> | + | </pre> |
| | | |
| == VHost par noms DNS == | | == VHost par noms DNS == |
Ligne 235 : |
Ligne 222 : |
| * soit en utilisant une adresse IP | | * soit en utilisant une adresse IP |
| | | |
− | <source lang="apache"> | + | <pre> |
− | NameVirtualHost *:80 | + | NameVirtualHost web.tala-informatique.fr:80 |
− | </source> | + | </pre> |
| | | |
| ''web.tala-informatique.fr'' = ''www.tala-informatique.fr'' = ''wiki.tala-informatique.fr'' = une adresse IP | | ''web.tala-informatique.fr'' = ''www.tala-informatique.fr'' = ''wiki.tala-informatique.fr'' = une adresse IP |
Ligne 243 : |
Ligne 230 : |
| Ensuite les VHost possèderont une variable ''ServerName'' différente | | Ensuite les VHost possèderont une variable ''ServerName'' différente |
| | | |
− | <source lang="apache"> | + | <pre> |
| <VirtualHost *:80> | | <VirtualHost *:80> |
| DocumentRoot /var/www/html/informatique | | DocumentRoot /var/www/html/informatique |
Ligne 253 : |
Ligne 240 : |
| ServerName wiki.tala-informatique.fr | | ServerName wiki.tala-informatique.fr |
| </VirtualHost> | | </VirtualHost> |
− | </source> | + | </pre> |
− | | |
− | == Rediriger les brebis égarées ==
| |
− | Il peut être utile d'utiliser la directive ''Redirect'' pour rediriger quelqu'un qui arrive en ''http'' si votre site est en ''https''.
| |
− | Pour cela nous allons créer un ''Vhost'' ''http'' identique à celui en ''https'' et qui aura pour unique rôle d'effectuer une règle de redirection:
| |
− | <source lang="apache">
| |
− | <VirtualHost www.tala-informatique.fr:80>
| |
− | ServerName www.tala-informatique.fr
| |
− | Redirect "/" "https://www.tala-informatique.fr/"
| |
− | </VirtualHost>
| |
− | | |
− | <VirtualHost www.tala-informatique.fr:443>
| |
− | ServerName www.tala-informatique.fr
| |
− | DocumentRoot /var/www/html/
| |
− | | |
− | SSLEngine on
| |
− | SSLCertificateFile /opt/ssl/www.tala-informatique.fr.crt
| |
− | SSLCertificateKeyFile /opt/ssl/www.tala-informatique.fr.key
| |
− | </VirtualHost>
| |
− | </source>
| |
| | | |
| = Le fichier ''.htaccess'' = | | = 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/httpd.conf''</B>
| |
− |
| |
− | Pour cela éditez le fichier et cherchez la ligne ''<Directory "/var/www/html" >''. Plus loin, il vous suffit de modifier la ligne ''AllowOverride None'' en ''AllowOverride All''.
| |
− | === 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 /path/to/.htpasswd
| |
− | AuthGroupFile /path/to/.htgroup
| |
− | 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}''
| |
| | | |
− | === Création du fichier de mot de passe === | + | = Reverse-Proxy = |
− | Pour créer le fichier de mot de passe, il faut utiliser la commande ''htpasswd''
| |
− | <pre>
| |
− | # htpasswd -c /path/to/.htpasswd jcf
| |
− | New password:
| |
− | Re-type new password:
| |
− | Adding password for user jcf
| |
− | </pre>
| |
− | | |
− | On vérifie que le fichier est bien crypté:
| |
− | <pre>
| |
− | # cat .htpasswd
| |
− | jcf:RM1/WS9zqOV8o
| |
− | </pre>
| |
− | La prochaine fois que l'on veut ajouter un compte il ne faut pas utiliser l'option ''-c'' (pour ''create''):
| |
− | <pre>
| |
− | # htpasswd /path/to/.htpasswd magali
| |
− | New password:
| |
− | Re-type new password:
| |
− | Adding password for user magali
| |
− | </pre>
| |
− | | |
− | = 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 ''/'' (''^/$'' → ''^'' signifie ''début de ligne'' et ''$'' fin de ligne) on est redirigé vers ''/wiki/''.
| |
− | | |
− | = Certificats =
| |
− | | |
− | 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 !
| |
− | | |
− | == Auto-signé ==
| |
− | === Génération ===
| |
− | Pour ce faire, nous allons utiliser ''openssl'' et notamment la commande suivante:
| |
− | <pre>
| |
− | # mkdir /opt/ssl
| |
− | # cd /opt/ssl
| |
− | # 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... Vous pouvez également utiliser [[cron]] !
| |
− | | |
− | ==Let's Encrypt==
| |
− | On peut également utiliser une autorité de certification pour générer le certificat à notre place. L'avantage est que le certificat sera reconnu par les navigateurs.
| |
− | ===Installation de acme.sh ===
| |
− | Pour cela nous allons utiliser un script qui va faire le travail à notre place :
| |
− | <pre>
| |
− | # wget -O - --no-check-certificate https://get.acme.sh | sh
| |
− | --2016-10-10 15:10:16-- https://get.acme.sh/
| |
− | Résolution de get.acme.sh... 195.154.91.106
| |
− | Connexion vers get.acme.sh|195.154.91.106|:443...connecté.
| |
− | AVERTISSEMENT : impossible de vérifier l'attribut get.acme.sh du certificat, émis par «/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3» :
| |
− | Le certificat émis a expiré.
| |
− | requête HTTP transmise, en attente de la réponse...200 OK
| |
− | Longueur: 671 [text/plain]
| |
− | Sauvegarde en : «STDOUT»
| |
− | | |
− | 100%[======================================================>] 671 --.-K/s ds 0s
| |
− | | |
− | 2016-10-10 15:10:16 (95,3 MB/s) - envoi vers sortie standard [671/671]
| |
− | | |
− | % Total % Received % Xferd Average Speed Time Time Time Current
| |
− | Dload Upload Total Spent Left Speed
| |
− | 100 100k 100 100k 0 0 478k 0 --:--:-- --:--:-- --:--:-- 1277k
| |
− | [lun. oct. 10 15:10:17 CEST 2016] Installing from online archive.
| |
− | [lun. oct. 10 15:10:17 CEST 2016] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
| |
− | [lun. oct. 10 15:10:18 CEST 2016] Extracting master.tar.gz
| |
− | [lun. oct. 10 15:10:18 CEST 2016] It is recommended to install nc first, try to install 'nc' or 'netcat'.
| |
− | [lun. oct. 10 15:10:18 CEST 2016] We use nc for standalone server if you use standalone mode.
| |
− | [lun. oct. 10 15:10:18 CEST 2016] If you don't use standalone mode, just ignore this warning.
| |
− | [lun. oct. 10 15:10:18 CEST 2016] Installing to /root/.acme.sh
| |
− | [lun. oct. 10 15:10:18 CEST 2016] Installed to /root/.acme.sh/acme.sh
| |
− | [lun. oct. 10 15:10:18 CEST 2016] OK, Close and reopen your terminal to start using acme.sh
| |
− | [lun. oct. 10 15:10:18 CEST 2016] Installing cron job
| |
− | [lun. oct. 10 15:10:19 CEST 2016] Good, bash is found, so change the shebang to use bash as prefered.
| |
− | [lun. oct. 10 15:10:19 CEST 2016] OK
| |
− | [lun. oct. 10 15:10:19 CEST 2016] Install success!
| |
− | </pre>
| |
− | | |
− | Une fois le script acme.sh installé, il suffit de recharger le contexte en exécutant la commande :
| |
− | <pre>
| |
− | # cd
| |
− | # . .bash_profile
| |
− | </pre>
| |
− | === Création des certificats===
| |
− | Mainteant le script acme.sh est accessible dans le shell:
| |
− | <pre>
| |
− | acme.sh --issue -d tala-informatique.fr -d www.tala-informatique.fr -w /var/www/html
| |
− | </pre>
| |
− | Vous devriez voir la commande se finir par :
| |
− | <font color=green>
| |
− | Cert success.
| |
− | </font>
| |
− | | |
− | === Installation des certificats===
| |
− | Maintenant que l'on a généré les certificats, il faut les installer dans le répertoire ''/opt/ssl/'' :
| |
− | <pre>
| |
− | # acme.sh --installcert -d www.tala-informatique.fr -d www.tala-informatique.fr --certpath /opt/ssl/www.tala-informatique.fr.crt --keypath /opt/ssl/www.tala-informatique.fr.key --reloadcmd "service httpd restart"
| |
− | </pre>
| |
− | Cela va installer les certificats et redémarrer le serveur Apache !
| |
− | | |
− | Maintenant, lorsque l'on se connecte on peut vérifier que le certificat est approuvé :
| |
− | [[Fichier:Www.tala-informatique.fr-cert-letsencrypt.png|centré]]
| |
− | | |
− | = Exemple de configuration =
| |
− | {|class="wikitable"
| |
− | ! Directive !! Valeur par défaut !! Config httpd !! Config Vhost !! Utilisation
| |
− | |-valign=top
| |
− | ||ServerTokens
| |
− | |align="center"|OS
| |
− | |align="center"| X
| |
− | |align="center"|
| |
− | || Permet de ne pas donner trop d'informations sur les modules qui sont installés. Généralement on passe cette directive à '''Prod'''
| |
− | |-
| |
− | ||ServerRoot
| |
− | |align="center"|"/etc/httpd"
| |
− | |align="center"| X
| |
− | ||
| |
− | ||Permet d'indiquer le répertoire d'installation d'Apache. Normalement les scripts d'installation ont bien renseigné cette ligne. Vérifiez quand même.
| |
− | |-
| |
− | ||PidFile
| |
− | |align="center"|run/httpd.pid
| |
− | |align="center"|X
| |
− | |align="center"|
| |
− | ||Indique au script de démarrage d'enregistrer le numéro de processus d'Apache pour que lors de l'arrêt du système le processus Apache soit stoppé correctement.
| |
− | |-
| |
− | ||Timeout
| |
− | |align="center"|60
| |
− | |align="center"|X
| |
− | |align="center"|
| |
− | ||Temps en secondes avant que le serveur n'envoie ou ne reçoive un timeout . Quand le serveur attend une ''réponse'' qui dépasse le temps définit par '''Timeout'', il va s'interrompre et prévenir l'utilisateur de l'erreur. Laissez cette valeur par défaut à moins que vous n'effectuiez des traitements dépassant cette limite. Ne pas monter trop haut cette valeur non plus car si le programme externe à "planté", ou si une erreur est survenue, vous risquez de rendre inaccessible le serveur Apache pour trop de temps (il est toujours désagréable d'attendre pour rien).
| |
− | |-
| |
− | ||KeepAlive
| |
− | |align="center"|Off
| |
− | |align="center"|X
| |
− | |align="center"|X
| |
− | ||Autorise ou non les connexions persistantes (plusieurs requêtes par connexions). En fait cela permet aux utilisateurs de votre serveur de lancer plusieurs requêtes à la fois, et donc d'accélérer les réponses du serveur. Laissez cette valeur par défaut la plupart du temps. Pour de petits serveurs laissez cette option sur on . Pour un serveur très sollicité, dès que vous vous apercevez que le système ralentit énormément ou devient indisponible assez souvent, essayez avec la valeur off . Mais avant, essayez de baisser la valeur de l'option suivante.
| |
− | |-
| |
− | ||MaxKeepAliveRequests
| |
− | |align="center"|
| |
− | |align="center"|X
| |
− | |align="center"|X
| |
− | ||En combinaison avec l'option précédente, indique le nombre de requêtes pour une connexion. Laissez cette valeur assez haute pour de très bonnes performances. Si vous mettez 0 comme valeur, vous en autorisez en fait un nombre illimité (attention donc). Laissez la valeur par défaut là aussi.
| |
− | |-
| |
− | ||KeepAliveTimeout
| |
− | |align="center"|15
| |
− | |align="center"|X
| |
− | |align="center"|X
| |
− | ||Valeur d'attente en secondes avant la requête suivante d'un même client, sur une même connexion, avant de renvoyer un ''timeout''. Laisser la valeur par défaut.
| |
− | |-
| |
− | ||Listen
| |
− | |align="center"|80
| |
− | |align="center"|X
| |
− | |align="center"|X
| |
− | ||Indique au serveur des ports ou des adresses IP, ou les deux, où il doit ''écouter'' les demandes de connexions.
| |
− | |-
| |
− | ||LoadModule, ClearModuleList & AddModule
| |
− | |align="left" width=20%|
| |
− | LoadModule xxxxxx.mod libexec/yyyyyy.so
| |
− | <br>ClearModuleList
| |
− | <br>AddModule zzzz.c
| |
− | |align="center"|X
| |
− | |align="center"|
| |
− | ||Support pour les modules DSO (Dynamic Shared Object). LoadModule permet de charger un module. Avant Apache 2, les directives ClearModuleList et AddModule permettaient de spécifier l'ordre d'exécution des modules, à cause de problèmes de dépendances. Apache 2 peut maintenant faire cela automatiquement, car les APIs de modules leur permet de spécifier eux-mêmes leur ordre. Sous Apache 1.*, il faut cependant y prêter une grande attention, et le maintenir à jour à l'ajout de tout nouveau module.
| |
− | |}
| |
|
HTTP |
HTTPS
|
Protocole |
tcp |
tcp
|
Port |
80 |
443
|
Configuration Iptables |
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT |
iptables -I INPUT 2 -p tcp --dport 443 -j ACCEPT
|
Préparation
Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un serveur DNS et désactiver SELinux.
Pour ceux qui auraient manqué des étapes les voici:
Une fois ces étapes effectuées, entrons dans le vif du sujet !
Installation
HTTP
# yum -y install httpd
HTTP et HTTPS
# yum -y install httpd mod_ssl
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
Listen *:80
La deuxième doit être cohérente avec le nom de la machine qui est précisé dans le fichier network
ServerName web:80
Premier démarrage
Maintenant on peut démarrer httpd
# service httpd start
Démarrage de httpd : [ OK ]
Vérification
On peut vérifier que httpd écoute sur la bonne adresse et les bons ports
# netstat -atnp | grep httpd
tcp 0 0 :::80 :::* LISTEN 1202/httpd
tcp 0 0 :::443 :::* LISTEN 1202/httpd
Enregistrement dans le chargeur de démarrage
# chkconfig httpd on
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)
# vi /var/www/html/index.html
Une fois le fichier édité, il ne faut pas oublier de repositionner les bons droits pour qu'apache soit apte à le lire
# chown apache.apache -R /var/www/html
Parcours des logs
httpd log dans le répertoire /var/log/httpd/ et utilise deux fichiers:
- access_log → pour journaliser tous les accès
- error_log → pour journaliser toutes les erreurs
favicon.ico ??
Quand on parcourt le fichier access_log on peut croiser la ligne suivante
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"
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
→
Vous pouvez la générer grâce au site suivant 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
# 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
Ces fichiers sont importés dans la configuration de httpd grâce à la directive Include présente dans le fichier httpd.conf
Include conf.d/*.conf
Nous allons donc créer un fichier spécifique pour nos VHost que nous appellerons vhost.conf
# touch /etc/httpd/conf.d/vhost.conf
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
Listen 80 # Ne pas ajouter si déjà dans httpd.conf
Listen 8080
ServerName www.tala-informatique.fr
Ensuite les VHost possèderont une directive VirtualHost différente
<VirtualHost *:80>
DocumentRoot /var/www/html/public
</VirtualHost>
<VirtualHost *:8080>
DocumentRoot /var/www/html/admin
</VirtualHost>
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.
Listen 192.168.200.251:80
DocumentRoot /var/www/html/
ServerName www.tala-informatique.fr
Ensuite le VHost possèdera une directive VirtualHost différente
<VirtualHost 192.168.200.250:80>
DocumentRoot /var/www/html/intranet
</VirtualHost>
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)
Listen 80
Puis on précise les interfaces d'écoute
<VirtualHost 192.168.200.250 192.168.200.251>
DocumentRoot /var/www/html/intranet
ServerName www.tala-informatique.fr
</VirtualHost>
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
NameVirtualHost web.tala-informatique.fr:80
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
<VirtualHost *:80>
DocumentRoot /var/www/html/informatique
ServerName www.tala-informatique.fr
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/wiki
ServerName wiki.tala-informatique.fr
</VirtualHost>
Le fichier .htaccess
Reverse-Proxy