Apache intro

Introduction

Apache est le 2e serveur http le plus répandu panerai replica au monde avec actuellement (2019) près de 50% des serveurs web actifs sur Internet.
Le no 1 est nginx ( nginx.org ) dédié aux sites à très gros trafic.
Pour info les serveurs d’application omega Replica Web d’IBM et d’Oracle sont …

Apache est composé d’un certain nombre iwc replica watches de modules de base et de modules optionnels (livrés avec apache mais non compilés avec le noyau).
Il existe 2 modules standards (compilés statiquement) :
– http_core (le noyau d’apache)
– mod_so (le module de gestion des modules dynamiques ou dso)

Les principales commandes et utilitaires d’apache se situent dans :
repertoire_dinstall_apache/bin (souvent /usr/local/bin) :

utilitaire objectif
httpd lancement du démon
apachectl utilitaire (shell) simplifié de start / stop / restart du démon
appxs gestion des extensions
ab tests de performance
htpasswd gestion des accès avec fichiers de passwords
htdigest gestion des accès avec authentification en mode digest
dbmmanage gestion des accès avec authentification par une BD externe
logresolve traitement différé (batch) des résolutions d’@ IP
rotatelogs permet de basculer vers un nouveau fichier log

la commande suivante donne la liste des modules de base :

$ httpd -l
Compiled-in modules:
http_core.c
mod_so.c 

Démarrage du serveur Apache

La commande httpd démarre le ou les démons http en standalone (indépendamment de inetd).
Suivant la config un process père et un ou plusieurs process fils sont démarrés. D’autres peuvent suivre pour s’adapter à la charge.
Les paramètres suivant de httpd.conf pilotent ce nombre de process :

MinSpareServers 5 : nombre min supplémentaires
MaxSpareServers 10 : nombre max de process supplémentaires
StartServers 5 : nombre initial

Le process père appartient au user qui lance http !
Les process fils ont le userid et le groupid définis par les paramètres user et group de httpd.conf

si on lance httpd sur le port d’écoute 80 (ce qui est la valeur par défaut) il faut être root !
Si on ne peut pas être root, il faut :
– soit lancer httpd sur un port >1024 (voir parmètre Port de httpd.conf)
– soit positionner le SUID bit du fichier httpd afin que le process s’exécute en tant que root, propriétaire du fichier, sans être connecté root! : chmod u+s /home_apache/bin/httpd

  • Au démarrage httpd ouvre en écriture principalement 4 fichiers :
  • – pidfile : il y stocke le no de process (pid) du process httpd père
  • – lockfile : fichier de verrouillage des requêtes concurrentes
    – access log : les traces de tous les accès clients
    – error log : les erreurs

faire attention aux droits d’écriture dans les répertoires d’accueil de ces fichiers. En cas de problème lors du démarrage voir éventuellement les erreurs tracées dans le log d’erreurs

lancement d’apache :

$httpd -f mon_fichier_de_config
sur certains Unix :
$apache -f mon_fichier_de_config
ou plus simple mais moins maîtrisé :
$apachectl start

rem: sur Windows on s’appuiera souvent sur des services et sur un outil graphique de management

exemple de lancement sous Linux/Ubuntu

dd@dd-laptop:~$ systemctl start apache2
dd@dd-laptop:~$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: 
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-12-12 23:25:00 CET; 1min 28s ago
Process: 2882 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS
Process: 2901 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE
Main PID: 2905 (apache2)
Tasks: 55 (limit: 4915)
CGroup: /system.slice/apache2.service
├─2905 /usr/sbin/apache2 -k start
├─2906 /usr/sbin/apache2 -k start
└─2907 /usr/sbin/apache2 -k start
déc. 12 23:25:00 dd-laptop systemd[1]: Starting The Apache HTTP Server...
déc. 12 23:25:00 dd-laptop systemd[1]: Started The Apache HTTP Server.
dd@dd-laptop:~$

vérification du lancement

Sur Unix/linux

$ps -ef|grep http

intranet 24774 1 0 Dec 03 - 0:06 /usr/local/bin/httpd
nobody 25026 24774 0 Dec 03 - 0:00 /usr/local/bin/httpd
nobody 25284 24774 0 Dec 03 - 0:00 /usr/local/bin/httpd
nobody 25824 24774 0 16:55:41 - 0:00 /usr/local/bin/httpd 

soit un process père de propriétaire ‘inttranet’ et 3 process fils appartenant à nobody (pas de root donc ici…)

ou sur Linux/Ubuntu

dd@dd-laptop:~$ ps -ef|grep apache
root 2905 1 0 23:25 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 2906 2905 0 23:25 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 2907 2905 0 23:25 ? 00:00:00 /usr/sbin/apache2 -k start
dd 2995 1868 0 23:26 pts/1 00:00:00 grep --color=auto apache
dd@dd-laptop:~$

ou sur Windows

gestionnaire de taches (en prenant soin d’afficher TOUS les processus utilisateurs)

ou

C:> netstat -a

en filtrant éventuellement sur le port 80

Arrêt / redémarrage du serveur Apache

ARRET :

$ apachectl stop ou  $ ps -ef|grep http
...
$ kill -TERM pid_process_pere

REDEMARRAGE IMMEDIAT (le process pere tue les fils sans attente) :

$apachectl restart

ou

$ ps -ef|grep http
...
$ kill -HUP pid_process_pere

REDEMARRAGE EN SOUPLESSE…

$ apachectl graceful
$ kill -USR1 pid_process_pere 

Apache configuration minimale

Le fichier httpd.conf est par défaut dans le sous répertoire conf du ‘ServerRoot’ (le répertoire d’install d’apache: /usr/local/apache/conf sur Unix

On peut le modifier avec Notepad ou vi car c’est un fichier texte.

Vous pouvez consulter le fichier httpd.conf.default fourni par défaut…

Il faut relancer Apache pour que les modifs soient prises en compte (apachectl restart, par exemple).

Pour vérifier les principaux paramètres:

$> apachectl -s
C:\> httpd -S    (en majuscule)

Organisation de la configuration

Le fichier principal htpd.conf fait appel, grace à la directive <Include> à d’autres fichiers de configurations plus spécifiques ou simplement plus personnalisés.
Eviter de mettre du spécifique dans le fichier principal. Si on veut faire du virtual host par exemple on incluera un fichier .conf spécifique pour le virtual host et on ne modifiera que ce fichier.
Voici un exemple des fichiers inclus ou ‘incluables’ (ceux en commentaire !)

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
#
# Various default settings
Include conf/extra/httpd-default.conf

La configuration du serveur s’effectue via des directives de configuration que l’on insère dans les fichiers de configuration. Une directive se compose d’un mot-clé suivi d’un ou plusieurs arguments qui définissent sa valeur.

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Bitnami_wamp7/apache2/htdocs"

Conteneurs et sections

Le paramétrage peut s’appliquer à la totalité du site ou être restreint à des sous parties du site , des sections.
On définir dse sections pour des répertoires, fichiers, hôtes, ou URLs particuliers.
Une section est délimitée par des balises de début et de fin, et seules les directives à l’intérieur seront opérationnelles.
La plupart des conteneurs de ces sections sont évalués pour chaque requête. . En revanche, les conteneurs <IfDefine>, <IfModule>, et <IfVersion> sont évalués seulement au démarrage ou au redémarrage du serveur.

Quelques exemples de conteneurs utiles:

</Directory> : Limite les directives au contenu du répertoire ET des sous répertoire

<Directory "/prive">
  Require all denied
</Directory>

<Files>  : directives qui s’appliquent à un ou plusieurs fichiers

<Files "toto.html">
    # directives qui s'appliquent au fichier toto
</Files>
<Files "*.pdf">
 # directives qui s'appliquent aux pdf
</Files>

<Location> : N’applique les directives contenues qu’aux URLs spécifiées
remarque: location est utile en dehors du systeme de fichiers sinon on peut utiliser <Directory>.

Un dato interesante es que muchos hombres no buscan tratamiento para problemas de erección debido a la vergüenza o el estigma social. Sin embargo, hay varias opciones disponibles, incluidas las soluciones que se pueden obtener en línea, como es el caso de aquellos que desean ***. La falta de información y el miedo a la consulta médica a menudo impiden que los hombres tomen medidas para mejorar su salud sexual.

Uno de los factores que puede contribuir a la disfunción eréctil es el estrés, que a menudo afecta la salud sexual de los hombres. Si bien hay tratamientos disponibles, algunos pueden buscar alternativas para aliviar sus síntomas, como el uso de medicamentos. Por ejemplo, algunos hombres han considerado opciones como  » para manejar la ansiedad que puede interferir con su rendimiento sexual.

Un dato interesante es que muchos hombres pueden experimentar problemas de erección en algún momento de su vida, lo cual puede ser influenciado por factores físicos y emocionales. En algunos casos, se ha observado que medicamentos como el tofranil pueden tener un impacto en la función sexual, por lo que es importante consultar a un médico antes de decidir “. La salud del corazón, el estrés y otros problemas emocionales también pueden contribuir a este tipo de condición.

<Location "/private1">
    #  ...
</Location>

l’exemple suivant montre comment faire référence à une URL particulière vers un gestionnaire interne du serveur HTTP Apache fourni par le module mod_status. Il n’est pas nécessaire de trouver un fichier nommé server-status dans le système de fichiers.

<Location "/server-status">
    SetHandler server-status
</Location>

Conteneur Fichier ou URL?

Pour appliquer des directives à des objets qui résident dans le système de fichiers, utilisez toujours un conteneur <Directory> ou <Files>. Pour appliquer des directives à des objets qui ne résident pas dans le système de fichiers (comme une page web générée par une base de données), utilisez un conteneur <Location>.

Il ne faut jamais utiliser un conteneur <Location> pour restreindre l’accès à des objets du système de fichiers, car plusieurs localisations de l’arborescence du site web (URLs) peuvent correspondre à la même localisation du système de fichier, ce qui peut permettre de contourner vos restrictions.

Fichier .htaccess

En plus des fichiers de configurations, certaines directives peuvent résider dans le ficheir .htaccess situé dans le répertoire de contenu.
C’est particulièrement utile lorque qu’on est hébergé… chez un hébergeur et qu’on n’a pas accès à la gestion du serveur Apache.

Il est possible d’utiliser un autre nom de fichier d’autorisation que .htaccess avec la directive AccessFileName :

AccessFileName  .htaccess_a_dd

La possibilité d’utiliser un .htaccess ou équivalent est soumise à autorisation, avec la directive AllowOverride :

AllowOverride All
#pour autoriser le fichier .htaccess à positionner 
#TOUTES les restrictions utiles.
AllowOverride None 
#indique à Apache d’ignorer totalement la présence d’un fichier .htaccess

Pour en savoir plus sur htaccess voir le  .htaccess howto.

Quelques paramètres de httpd.conf, bien utiles

paramètre signification valeur par défaut exemple
ServerRoot la racine d’install d’apache Unix : /usr/local/apache ServerRoot « /usr/local »
DocumentRoot la racine du site (le ‘/’ des documents DocumentRoot « c:\wwwroot\ »
ServerName le nom logique du serveur (en général un nom DNS complet serveur + nom de domaine ServerName site_dd.free.fr
port no de port TCP/IP a l’ecoute des requete http 80 (on peut l’omettre dans l’URL) port 82
user le propriétaire des process HTTP User nobody
group le groupe d’appartenance des process HTTP Group nobody
ServerAdmin le mail de l’administrateur (sera indiqué lors d’erreur du serveur) root@localhost ServerAdmin dd@free.fr
StartServers le nb de process simultanés démarrés lors du lancement de httpd 5 StartServers 3
DirectoryIndex les fichiers d’index acceptés index.html DirectoryIndex index.php
PassEnv
SetEnv
Déclaration de variable dans l’env. Apache et….Affectation de valeur PassEnv LIBPATH
SetEnv LIBPATH /toto/lib
Options options d’une Directory FollowSymlinks Options Indexes
ErrorLog emplacement des fichier traces d’erreur ErrorLog /var/apache/log/error_log
CustomLog emplacement des fichier traces des requetes HTTP clientes CustomLog /var/apache/log/access_log common

Fichier de configuration minimal (version 2.4 ou >)

# http.conf Ultra Light
#
# le minimum syndical pour le serveur et la racine
#
ServerRoot "C:/Bitnami/wampstack-5.6.40-1/apache2"
Listen 80
ServerName localhost:80
DocumentRoot "C:/Bitnami/wampstack-5.6.40-1/apache2/htdocs"
#
# modules utiles a minima
#
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
#
# on securise le file system
#
<Directory />
AllowOverride none
Require all denied
</Directory>
#
# on autorise le repertoire (et les sous rep) utiles*
#
<Directory "C:/Bitnami/wampstack-5.6.40-1/apache2/htdocs">
Require all granted
</Directory>

remarque: l’accès à la racine du serveur suppose l’existence d’ un document nommé index.html (valeur par défaut de DirectoryIndex)