--><!--#set var="TITLE" value="Felaktig Gateway!"
--><!--#include virtual="include/top.html" -->
- Proxyservern mottog ett felaktigt svar från
+ Proxyservern mottog ett felaktigt svar från
en tidigare server.
<!--#if expr="-n v('REDIRECT_ERROR_NOTES')" -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Requisição Inválida!"
+--><!--#set var="TITLE" value="Requisição Inválida!"
--><!--#include virtual="include/top.html" -->
Seu "browser" (ou o servidor proxy) enviou uma
- requisição inválida ao servidor.
+ requisição inválida ao servidor.
<!--#include virtual="include/bottom.html" -->
-------pt-br--
--><!--#include virtual="include/top.html" -->
O seu <i>browser</i> ou <i>proxy</i> enviou
- um pedido que este servidor não compreendeu.
+ um pedido que este servidor não compreendeu.
<!--#include virtual="include/bottom.html" -->
----------pt--
Content-type: text/html; charset=UTF-8
Body:----------sv--
<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Felaktig förfrågan!"
+--><!--#set var="TITLE" value="Felaktig förfrågan!"
--><!--#include virtual="include/top.html" -->
- Din webbläsare eller proxy skickade en förfrågan
- som denna server inte kunde förstå.
+ Din webbläsare eller proxy skickade en förfrågan
+ som denna server inte kunde förstå.
<!--#include virtual="include/bottom.html" -->
----------sv--
<!--#else -->
Non disponi dei permessi necessari per accedere all'oggetto
- richiesto, oppure l'oggetto non può essere letto dal server.
+ richiesto, oppure l'oggetto non può essere letto dal server.
<!--#endif -->
<!--#if expr="v('REDIRECT_URL') =~ m:/$:" -->
- Você não tem permissão para acessar o
+ Você não tem permissão para acessar o
diretório requisitado.
- Pode não existir o arquivo de índice ou
+ Pode não existir o arquivo de índice ou
o diretório pode estar protegido contra leitura.
<!--#else -->
- Você não tem permissão para acessar o
+ Você não tem permissão para acessar o
objeto requisitado. Ele pode estar protegido contra leitura ou
- não ser legível pelo servidor.
+ não ser legível pelo servidor.
<!--#endif -->
<!--#if expr="v('REDIRECT_URL') =~ m:/$:" -->
- Não tem permissão para aceder ao directório
- que deseja. Ou não existe o documento de índice
+ Não tem permissão para aceder ao directório
+ que deseja. Ou não existe o documento de índice
ou o directório está protegido contra leitura.
<!--#else -->
- Não tem permissão para aceder ao objecto
+ Não tem permissão para aceder ao objecto
que deseja. Este está protegido contra leitura ou
- o servidor não o consegue ler.
+ o servidor não o consegue ler.
<!--#endif -->
<!--#if expr="v('REDIRECT_URL') =~ m:/$:" -->
- Du har inte tillräckliga rättigheter för att få
- tillgång till den önskade katalogen. Det existerar inget
- indexdokument eller så är katalogen lässkyddad.
+ Du har inte tillräckliga rättigheter för att få
+ tillgång till den önskade katalogen. Det existerar inget
+ indexdokument eller så är katalogen lässkyddad.
<!--#else -->
- Du har inte tillräckliga rättigheter för att få
- tillgång till det önskade objektet. Objektet är
+ Du har inte tillräckliga rättigheter för att få
+ tillgång till det önskade objektet. Objektet är
lässkyddat eller inte läsbart för servern.
<!--#endif -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Recurso não disponível!"
+--><!--#set var="TITLE" value="Recurso não disponível!"
--><!--#include virtual="include/top.html" -->
- A URL solicitada não está disponível neste servidor
- e não existe um endereço alternativo.
+ A URL solicitada não está disponível neste servidor
+ e não existe um endereço alternativo.
<!--#if expr="-n v('HTTP_REFERER')" -->
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Recurso não disponível!"
+<!--#set var="TITLE" value="Recurso não disponível!"
--><!--#include virtual="include/top.html" -->
- O URL desejado já não está disponível
- neste servidor e não existe endereço alternativo.
+ O URL desejado já não está disponível
+ neste servidor e não existe endereço alternativo.
<!--#if expr="-n v('HTTP_REFERER')" -->
Por favor informe o autor da
<a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">página
- originária</a> que a hiperligação está
+ originária</a> que a hiperligação está
desactualizada.
<!--#else -->
- Se chegou aqui a partir de uma hiperligação externa,
+ Se chegou aqui a partir de uma hiperligação externa,
por favor contacte o autor dessa página.
<!--#endif -->
--><!--#include virtual="include/top.html" -->
Den önskade adressen är inte längre tillgänglig hos
- denna server och det finns inte någon adress för vidarebefodran.
+ denna server och det finns inte någon adress för vidarebefodran.
<!--#if expr="-n v('HTTP_REFERER')" -->
<!--#else -->
- Om du följde en länk från en extern sida, vänligen
+ Om du följde en länk från en extern sida, vänligen
kontakta författaren av den sidan.
<!--#endif -->
<!--#if expr="-n v('REDIRECT_ERROR_NOTES')" -->
- O servidor encontrou um erro interno e não pode
- completar sua requisição.
+ O servidor encontrou um erro interno e não pode
+ completar sua requisição.
<!--#include virtual="include/spacer.html" -->
<!--#else -->
- O servidor encontrou um erro interno e não
- foi possível completar sua requisição.
+ O servidor encontrou um erro interno e não
+ foi possível completar sua requisição.
O servidor está sobrecarregado ou existe um
erro em um script CGI.
<!--#if expr="-n v('REDIRECT_ERROR_NOTES')" -->
- O servidor encontrou um erro interno e não pode completar
+ O servidor encontrou um erro interno e não pode completar
o seu pedido.
<!--#include virtual="include/spacer.html" -->
<!--#else -->
- O servidor encontrou um erro interno e não pode completar
+ O servidor encontrou um erro interno e não pode completar
o seu pedido. Ou o servidor está sobrecarregado, ou ocorreu
um erro num <i>script</i> CGI.
<!--#if expr="-n v('REDIRECT_ERROR_NOTES')" -->
- Servern råkade ut för ett internt fel och det var inte möjligt
+ Servern råkade ut för ett internt fel och det var inte möjligt
att slutföra din begäran.
<!--#include virtual="include/spacer.html" -->
<!--#else -->
- Servern råkade ut för ett internt fel och det var inte möjligt
+ Servern råkade ut för ett internt fel och det var inte möjligt
att slutföra din begäran. Servern är antingen överbelastad
- eller så innehåller CGI-skriptet fel.
+ eller så innehåller CGI-skriptet fel.
<!--#endif -->
--><!--#set var="TITLE" value="Content-Length Inválido!"
--><!--#include virtual="include/top.html" -->
- Uma requisição
+ Uma requisição
do método <!--#echo var="REDIRECT_REQUEST_METHOD"-->
requer um cabeçalho <code>Content-Length</code> válido.
--><!--#set var="TITLE" value="Felaktig Content-Length!"
--><!--#include virtual="include/top.html" -->
- En förfrågan med <!--#echo var="REDIRECT_REQUEST_METHOD" -->
+ En förfrågan med <!--#echo var="REDIRECT_REQUEST_METHOD" -->
metoden kräver ett korrekt <code>Content-Length</code> huvud.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Método não permitido!"
+--><!--#set var="TITLE" value="Método não permitido!"
--><!--#include virtual="include/top.html" -->
O método <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- não é permitido para a URL requisitada.
+ não é permitido para a URL requisitada.
<!--#include virtual="include/bottom.html" -->
-------pt-br--
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Método não permitido!"
+<!--#set var="TITLE" value="Método não permitido!"
--><!--#include virtual="include/top.html" -->
- O método <!--#echo var="REDIRECT_REQUEST_METHOD" --> não
+ O método <!--#echo var="REDIRECT_REQUEST_METHOD" --> não
é permitido para o URL pedido.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:----------sv--
<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Metoden inte tillåten!"
+--><!--#set var="TITLE" value="Metoden inte tillåten!"
--><!--#include virtual="include/top.html" -->
<!--#echo var="REDIRECT_REQUEST_METHOD" -->
- metoden är inte tillåten för den förfrågade
+ metoden är inte tillåten för den förfrågade
adressen.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Objeto não encontrado!"
+--><!--#set var="TITLE" value="Objeto não encontrado!"
--><!--#include virtual="include/top.html" -->
- A URL requisitada não foi encontrada neste servidor.
+ A URL requisitada não foi encontrada neste servidor.
<!--#if expr="-n v('HTTP_REFERER')" -->
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Método não permitido!"
+<!--#set var="TITLE" value="Método não permitido!"
--><!--#include virtual="include/top.html" -->
- O método <!--#echo var="REDIRECT_REQUEST_METHOD" --> não
+ O método <!--#echo var="REDIRECT_REQUEST_METHOD" --> não
é permitido para o URL pedido.
<!--#include virtual="include/bottom.html" -->
--><!--#set var="TITLE" value="Objektet hittas ej!"
--><!--#include virtual="include/top.html" -->
- Den efterfrågade adressen hittades inte på denna server.
+ Den efterfrågade adressen hittades inte på denna server.
<!--#if expr="-n v('HTTP_REFERER')" -->
- Länken på den
+ Länken på den
<a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">tidigare sidan</a>
verkar vara felaktig eller inaktuell. Vänligen informera författaren av
<a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">sidan</a>
<!--#else -->
- Om du skrev in adressen manuellt så kontrollera din stavning och
+ Om du skrev in adressen manuellt så kontrollera din stavning och
försök igen.
<!--#endif -->
Content-type: text/html; charset=UTF-8
Body:----------it--
<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="La richiesta non può essere soddisfatta!"
+--><!--#set var="TITLE" value="La richiesta non può essere soddisfatta!"
--><!--#include virtual="include/top.html" -->
Il server non supporta il tipo di azione richiesta dal browser.
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="A requisição não pode ser processada!"
+--><!--#set var="TITLE" value="A requisição não pode ser processada!"
--><!--#include virtual="include/top.html" -->
- O servidor não suporta a ação requisitada pelo
+ O servidor não suporta a ação requisitada pelo
seu "browser".
<!--#include virtual="include/bottom.html" -->
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Não posso processar o pedido!"
+<!--#set var="TITLE" value="Não posso processar o pedido!"
--><!--#include virtual="include/top.html" -->
- O servidor não suporta a acção pedida pelo
+ O servidor não suporta a acção pedida pelo
<i>browser</i>.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Falha de precondição!"
+--><!--#set var="TITLE" value="Falha de precondição!"
--><!--#include virtual="include/top.html" -->
- A condição necessária para a
- requisição da URL foi avaliada como falsa.
+ A condição necessária para a
+ requisição da URL foi avaliada como falsa.
<!--#include virtual="include/bottom.html" -->
-------pt-br--
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Pré-condição falhou!"
+<!--#set var="TITLE" value="Pré-condição falhou!"
--><!--#include virtual="include/top.html" -->
- A condição necessária ao pedido do URL
+ A condição necessária ao pedido do URL
foi avaliada com resultado negativo.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
Den nödvändiga förutsättningen för
- adressförfrågan passerade inte utvärderingen
+ adressförfrågan passerade inte utvärderingen
med acceptabelt resultat.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
O método <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- não permite a transmissão dos dados,
+ não permite a transmissão dos dados,
ou o volume de dados excede a capacidade limite.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
O método <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- não permite todos os dados que foram transmitidos,
+ não permite todos os dados que foram transmitidos,
ou o volume de dados excede o limite da capacidade.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:----------sv--
<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="För stor enhet vid förfrågan!"
+--><!--#set var="TITLE" value="För stor enhet vid förfrågan!"
--><!--#include virtual="include/top.html" -->
- <!--#echo var="REDIRECT_REQUEST_METHOD" --> metoden tillåter
- inte den skickade datan eller så överskrider datavolymen
- kapacitetsnivån.
+ <!--#echo var="REDIRECT_REQUEST_METHOD" --> metoden tillåter
+ inte den skickade datan eller så överskrider datavolymen
+ kapacitetsnivån.
<!--#include virtual="include/bottom.html" -->
----------sv--
--><!--#include virtual="include/top.html" -->
De server heeft de netwerkverbinding gesloten omdat de browser
- de vraag niet heeft beëindigd binnen een gestelde tijd.
+ de vraag niet heeft beëindigd binnen een gestelde tijd.
<!--#include virtual="include/bottom.html" -->
----------nl--
--><!--#set var="TITLE" value="Tempo excedido!"
--><!--#include virtual="include/top.html" -->
- O servidor encerrou a conexão porque o "browser"
- não finalizou a requisição dentro
+ O servidor encerrou a conexão porque o "browser"
+ não finalizou a requisição dentro
do tempo limite.
<!--#include virtual="include/bottom.html" -->
<!--#set var="TITLE" value="Tempo excedido!"
--><!--#include virtual="include/top.html" -->
- O servidor interrompeu a ligação de rede porque o
- <i>browser</i> não terminou o pedido dentro do tempo limite.
+ O servidor interrompeu a ligação de rede porque o
+ <i>browser</i> não terminou o pedido dentro do tempo limite.
<!--#include virtual="include/bottom.html" -->
----------pt--
--><!--#include virtual="include/top.html" -->
Servern stängde förbindelsen därför att
- webbläsaren inte avslutade förfrågan inom
+ webbläsaren inte avslutade förfrågan inom
förbestämd tid.
<!--#include virtual="include/bottom.html" -->
La lunghezza dell'indirizzo (URL) trasmesso supera il
limite massimo imposto da questo server.
- La richiesta non può essere soddisfatta.
+ La richiesta non può essere soddisfatta.
<!--#include virtual="include/bottom.html" -->
----------it--
--><!--#include virtual="include/top.html" -->
O tamanho do endereço (URL) excede a capacidade limite
- desse servidor. A requisição não pode ser
+ desse servidor. A requisição não pode ser
processada.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
O tamanho do URL pedido excede o limite da capacidade deste
- servidor. O pedido não pode ser processado.
+ servidor. O pedido não pode ser processado.
<!--#include virtual="include/bottom.html" -->
----------pt--
Content-type: text/html; charset=UTF-8
Body:----------sv--
<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Efterfrågad URI för stor!"
+--><!--#set var="TITLE" value="Efterfrågad URI för stor!"
--><!--#include virtual="include/top.html" -->
- Längden på adressen som efterfrågas överskrider
- kapacitetsgränsen för denna server. Förfrågan kan
+ Längden på adressen som efterfrågas överskrider
+ kapacitetsgränsen för denna server. Förfrågan kan
inte verkställas.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
O servidor está temporariamente fora de serviço
- para manutanção ou devido a problemas de capacidade.
+ para manutanção ou devido a problemas de capacidade.
Por favor tente acessar mais tarde.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
O servidor está temporáriamente incapaz de servir
- o seu pedido devido a uma interrupção para
- manutenção ou problemas de capacidade. Por favor
+ o seu pedido devido a uma interrupção para
+ manutenção ou problemas de capacidade. Por favor
tente de novo mais tarde.
<!--#include virtual="include/bottom.html" -->
--><!--#include virtual="include/top.html" -->
Servern är för tillfället oförmögen att
- utföra din förfrågan på grund av underhåll
+ utföra din förfrågan på grund av underhåll
eller kapacitetsbegränsningar. Vänligen försök
igen senare.
--><!--#set var="TITLE" value="Autorizzazione necessaria!"
--><!--#include virtual="include/top.html" -->
- Questo server non può verificare l'autorizzazione
+ Questo server non può verificare l'autorizzazione
all'accesso a "<!--#echo encoding="url" var="REDIRECT_URL" -->".
Questo errore potrebbe essere causato da credenziali errate
(nome utente o password errata) oppure da un browser che non
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Autenticação Requerida!"
+--><!--#set var="TITLE" value="Autenticação Requerida!"
--><!--#include virtual="include/top.html" -->
- Este servidor não pode autorizar o seu acesso à URL
+ Este servidor não pode autorizar o seu acesso à URL
"<!--#echo encoding="url" var="REDIRECT_URL" -->".
Você deve ter fornecido dados incorretos (ex. senha errada), ou o seu
- "browser" não fornece as credenciais necessárias.
+ "browser" não fornece as credenciais necessárias.
<!--#include virtual="include/spacer.html" -->
- No caso de você realmente possuir permissão para este documento,
+ No caso de você realmente possuir permissão para este documento,
por favor checar seu login e sua senha e tentar novamente.
<!--#include virtual="include/bottom.html" -->
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Autenticação exigida!"
+<!--#set var="TITLE" value="Autenticação exigida!"
--><!--#include virtual="include/top.html" -->
- Este servidor não conseguiu validar a sua autoridade para aceder
+ Este servidor não conseguiu validar a sua autoridade para aceder
ao URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
Ou forneceu as credenciais erradas (e.g.: senha incorrecta)
- ou o seu <i>browser</i> não sabe como fornecer as credenciais
+ ou o seu <i>browser</i> não sabe como fornecer as credenciais
necessárias.
<!--#include virtual="include/spacer.html" -->
--><!--#set var="TITLE" value="Autentisering krävs!"
--><!--#include virtual="include/top.html" -->
- Servern kunde inte verifiera att du har tillåtelse att besöka
+ Servern kunde inte verifiera att du har tillåtelse att besöka
adressen "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Antingen angav du felaktiga uppgifter (ex. fel lösenord) eller så
+ Antingen angav du felaktiga uppgifter (ex. fel lösenord) eller så
stödjer inte din webbläsare detta autentiseringssätt.
<!--#include virtual="include/spacer.html" -->
- Om du har tillåtelse att besöka sidan, vänligen kontrollera ditt
+ Om du har tillåtelse att besöka sidan, vänligen kontrollera ditt
användarnamn samt lösenord och försök igen.
<!--#include virtual="include/bottom.html" -->
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Tipo de media não suportado!"
+--><!--#set var="TITLE" value="Tipo de media não suportado!"
--><!--#include virtual="include/top.html" -->
- O servidor não suporta o tipo de mídia
- transmitida nesta requisição.
+ O servidor não suporta o tipo de mídia
+ transmitida nesta requisição.
<!--#include virtual="include/bottom.html" -->
-------pt-br--
Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
-<!--#set var="TITLE" value="Media não suportado!"
+<!--#set var="TITLE" value="Media não suportado!"
--><!--#include virtual="include/top.html" -->
- O servidor não suporta o <i>media type</i> transmitido no pedido.
+ O servidor não suporta o <i>media type</i> transmitido no pedido.
<!--#include virtual="include/bottom.html" -->
----------pt--
--><!--#set var="TITLE" value="Mediatypen stöds ej!"
--><!--#include virtual="include/top.html" -->
- Servern stödjer inte den mediatyp som skickats i förfrågan.
+ Servern stödjer inte den mediatyp som skickats i förfrågan.
<!--#include virtual="include/bottom.html" -->
----------sv--
--><!--#set var="TITLE" value="Variante auto-negociável!"
--><!--#include virtual="include/top.html" -->
- Uma variante da entidade de requisição
+ Uma variante da entidade de requisição
é por si mesma um recurso negociável.
- Acesso não é possível.
+ Acesso não é possível.
<!--#include virtual="include/bottom.html" -->
-------pt-br--
--><!--#include virtual="include/top.html" -->
A variante relativa à entidade pedida é ela mesma
- um recurso negociável. Não é possível
+ um recurso negociável. Não é possível
ter acesso.
<!--#include virtual="include/bottom.html" -->
--><!--#set var="TITLE" value="Variant also varies!"
--><!--#include virtual="include/top.html" -->
- En variant av den förfrågade enheten är i
+ En variant av den förfrågade enheten är i
sig själv en giltig resurs. Åtkomst är inte
möjlig.
Content-language: sv
Content-type: text/html; charset=UTF-8
Body:----------sv--
-Om du tror att detta beror på ett serverfel, vänligen kontakta
+Om du tror att detta beror på ett serverfel, vänligen kontakta
<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webbansvarig</a>.
----------sv--
</highlight>
<p>Si un script est dédié à la gestion d'une condition d'erreur
- spécifique, telle que <code>404 Not Found</code>, il
+ spécifique, telle que <code>404 Not Found</code>, il
peut utiliser le code et le texte de l'erreur spécifiques à la
place.</p>
<p>Notez que si la réponse contient un en-tête
<code>Location:</code> (afin d'initier une redirection côté
client), le script <em>doit</em> émettre un en-tête approprié
- (comme <code>302 Found</code>). Dans le cas contraire,
+ (comme <code>302 Found</code>). Dans le cas contraire,
l'en-tête <code>Location:</code> ne produira aucun effet.</p>
</section>
<manualpage metafile="dns-caveats.xml.meta">
- <title>Problèmes liés au DNS avec le serveur HTTP Apache</title>
+ <title>Problèmes liés au DNS avec le serveur HTTP Apache</title>
<summary>
- <p>Cette page pourrait se résumer ainsi : configurez le
- serveur HTTP Apache de façon
- à ce qu'il n'ait pas besoin de résolution DNS pour interpréter les
- fichiers de configuration. Si httpd doit effectuer des résolutions
- DNS pour interpréter les fichiers de configuration, votre serveur
- pourra présenter des problèmes de fiabilité (en d'autres termes,
- il est possible qu'il refuse de démarrer), ou d'attaques par déni ou
- usurpation de service (y compris l'attribution de requêtes à un
+ <p>Cette page pourrait se résumer ainsi : configurez le
+ serveur HTTP Apache de façon
+ à ce qu'il n'ait pas besoin de résolution DNS pour interpréter les
+ fichiers de configuration. Si httpd doit effectuer des résolutions
+ DNS pour interpréter les fichiers de configuration, votre serveur
+ pourra présenter des problèmes de fiabilité (en d'autres termes,
+ il est possible qu'il refuse de démarrer), ou d'attaques par déni ou
+ usurpation de service (y compris l'attribution de requêtes à un
serveur virtuel autre que le serveur virtuel voulu).</p>
</summary>
</highlight>
<p>Pour fonctionner correctement, le serveur a absolument besoin de deux
- informations à propos de chaque serveur virtuel : le nom du serveur
- défini par la directive <directive
- module="core">ServerName</directive>, et au moins une adresse IP à
- laquelle le serveur va se rattacher et répondre. L'exemple ci-dessus
+ informations à propos de chaque serveur virtuel : le nom du serveur
+ défini par la directive <directive
+ module="core">ServerName</directive>, et au moins une adresse IP à
+ laquelle le serveur va se rattacher et répondre. L'exemple ci-dessus
ne comporte pas d'adresse IP, si bien que httpd devra utiliser le
DNS pour trouver l'adresse IP de <code>www.example.dom</code>. Si pour
- une raison quelconque, le DNS n'est pas disponible au moment où
- votre serveur interprète son fichier de configuration, ce serveur
+ une raison quelconque, le DNS n'est pas disponible au moment où
+ votre serveur interprète son fichier de configuration, ce serveur
virtuel <strong>ne sera pas pris en compte dans la
configuration</strong>. Il sera incapable de
- répondre à toute requête pour ce serveur virtuel.</p>
+ répondre à toute requête pour ce serveur virtuel.</p>
<p>Supposons que l'adresse de <code>www.example.dom</code> soit
192.0.2.1, et examinons cet extrait de configuration :</p>
<p>Cette fois, httpd doit effectuer une recherche DNS inverse pour
trouver le nom <code>ServerName</code> de ce serveur virtuel. Si
- cette recherche inverse échoue, le serveur virtuel sera
- partiellement désactivé. Si le serveur
- virtuel est à base de nom, il sera en fait totalement désactivé,
- mais s'il est à base d'adresse IP, il fonctionnera probablement.
- Cependant, httpd échouera s'il doit générer une URL complète pour
+ cette recherche inverse échoue, le serveur virtuel sera
+ partiellement désactivé. Si le serveur
+ virtuel est à base de nom, il sera en fait totalement désactivé,
+ mais s'il est à base d'adresse IP, il fonctionnera probablement.
+ Cependant, httpd échouera s'il doit générer une URL complète pour
le serveur qui inclut ce nom de serveur (comme dans le cas d'une
redirection).</p>
- <p>Voici un extrait de configuration qui permet d'éviter ces deux
- types de problèmes :</p>
+ <p>Voici un extrait de configuration qui permet d'éviter ces deux
+ types de problèmes :</p>
<highlight language="config">
<VirtualHost 192.0.2.1>
</section>
<section id="denial">
- <title>Déni de service</title>
+ <title>Déni de service</title>
- <p>Considérons cet extrait de configuration :</p>
+ <p>Considérons cet extrait de configuration :</p>
<highlight language="config">
<VirtualHost www.example1.dom>
</VirtualHost>
</highlight>
- <p>Supposons que vous ayez assigné 192.0.2.1 à
- <code>www.example1.dom</code> et 192.0.2.2 à <code>www.example2.dom</code>. En
- outre, supposons que <code>example1.dom</code> gère son propre DNS. Avec
+ <p>Supposons que vous ayez assigné 192.0.2.1 à
+ <code>www.example1.dom</code> et 192.0.2.2 à <code>www.example2.dom</code>. En
+ outre, supposons que <code>example1.dom</code> gère son propre DNS. Avec
cette configuration, <code>example1.dom</code> sera en mesure de
- détourner tout trafic destiné à <code>example2.dom</code>. Pour y
- parvenir, tout ce qu'ils ont à faire consiste à
- assigner 192.0.2.2 à
- <code>www.example1.dom</code>. Comme ils gèrent leur propre DNS, vous ne
- pouvez pas les empêcher de faire pointer l'enregistrement
+ détourner tout trafic destiné à <code>example2.dom</code>. Pour y
+ parvenir, tout ce qu'ils ont à faire consiste à
+ assigner 192.0.2.2 à
+ <code>www.example1.dom</code>. Comme ils gèrent leur propre DNS, vous ne
+ pouvez pas les empêcher de faire pointer l'enregistrement
<code>www.example1.dom</code> vers l'adresse qu'ils veulent.</p>
- <p>Les requêtes à destination de 192.0.2.2 (y compris toutes celles
- où l'utilisateur à tapé une URL de la forme
+ <p>Les requêtes à destination de 192.0.2.2 (y compris toutes celles
+ où l'utilisateur à tapé une URL de la forme
<code>http://www.example2.dom/quelquepart</code>), seront toutes servies
par le serveur virtuel <code>example1.dom</code>. Une meilleur
- compréhension de la raison pour laquelle ceci peut se produire
- nécessite une discussion plus approfondie à propos de la manière
- dont httpd associe les requêtes entrantes aux différents serveurs
- virtuels qui vont les servir. Un document de base décrivant ceci <a
+ compréhension de la raison pour laquelle ceci peut se produire
+ nécessite une discussion plus approfondie à propos de la manière
+ dont httpd associe les requêtes entrantes aux différents serveurs
+ virtuels qui vont les servir. Un document de base décrivant ceci <a
href="vhosts/details.html">est disponible</a>.</p>
</section>
<title>L'adresse du "serveur principal"</title>
<p><a href="vhosts/name-based.html">Le support des
- serveurs virtuels à base de nom</a> oblige httpd à
- connaître la/les adresse(s) IP de l'hôte sur
- lequel <program>httpd</program> s'exécute. Pour obtenir cette
+ serveurs virtuels à base de nom</a> oblige httpd à
+ connaître la/les adresse(s) IP de l'hôte sur
+ lequel <program>httpd</program> s'exécute. Pour obtenir cette
adresse, soit il utilise la directive <directive
- module="core">ServerName</directive> globale (si elle est présente),
- soit il fait appel à la fonction C <code>gethostname</code> (qui
- doit renvoyer le même nom que la commande shell "hostname"). Il
+ module="core">ServerName</directive> globale (si elle est présente),
+ soit il fait appel à la fonction C <code>gethostname</code> (qui
+ doit renvoyer le même nom que la commande shell "hostname"). Il
effectue ensuite une recherche DNS sur cette adresse. Pour le
- moment, il n'existe aucun moyen d'éviter cette recherche DNS.</p>
-
- <p>Si vous craignez que cette recherche DNS échoue parce que votre
- serveur DNS est arrêté, vous pouvez insérer le nom d'hôte dans le
- fichier <code>/etc/hosts</code> (où il est probablement déjà
- enregistré afin que la machine démarre correctement). Assurez-vous
- ensuite que la machine est configurée pour utiliser
- <code>/etc/hosts</code> dans le cas où la recherche DNS échoue.
- Suivant le système d'exploitation que vous utilisez, vous y
- parviendrez en éditant <code>/etc/resolv.conf</code>, ou
+ moment, il n'existe aucun moyen d'éviter cette recherche DNS.</p>
+
+ <p>Si vous craignez que cette recherche DNS échoue parce que votre
+ serveur DNS est arrêté, vous pouvez insérer le nom d'hôte dans le
+ fichier <code>/etc/hosts</code> (où il est probablement déjà
+ enregistré afin que la machine démarre correctement). Assurez-vous
+ ensuite que la machine est configurée pour utiliser
+ <code>/etc/hosts</code> dans le cas où la recherche DNS échoue.
+ Suivant le système d'exploitation que vous utilisez, vous y
+ parviendrez en éditant <code>/etc/resolv.conf</code>, ou
<code>/etc/nsswitch.conf</code>.</p>
<p>Si votre serveur n'a aucune autre raison d'effectuer des
- recherches DNS, vous pouvez définir la variable d'environnement
- <code>HOSTRESORDER</code> à "local", et vous serez alors en mesure
- d'exécuter httpd. Tout dépend du système d'exploitation et des
- bibliothèques de résolution de noms que vous utilisez. Elle affecte
- aussi les programmes CGI, à moins que vous n'utilisiez
- <module>mod_env</module> pour contrôler l'environnement. Il est
- conseillé de consulter les pages de manuel ou les FAQs de votre
- système d'exploitation.</p>
+ recherches DNS, vous pouvez définir la variable d'environnement
+ <code>HOSTRESORDER</code> à "local", et vous serez alors en mesure
+ d'exécuter httpd. Tout dépend du système d'exploitation et des
+ bibliothèques de résolution de noms que vous utilisez. Elle affecte
+ aussi les programmes CGI, à moins que vous n'utilisiez
+ <module>mod_env</module> pour contrôler l'environnement. Il est
+ conseillé de consulter les pages de manuel ou les FAQs de votre
+ système d'exploitation.</p>
</section>
<section id="tips">
- <title>Conseils pour éviter ce genre de problème</title>
+ <title>Conseils pour éviter ce genre de problème</title>
<ul>
<li>
</li>
<li>
- vérifiez que tous les serveurs virtuels possèdent un nom
+ vérifiez que tous les serveurs virtuels possèdent un nom
<directive module="core">ServerName</directive> explicite
</li>
- <li>créez un serveur virtuel <code><VirtualHost
- _default_:*></code> qui n'a aucune page à servir</li>
+ <li>créez un serveur virtuel <code><VirtualHost
+ _default_:*></code> qui n'a aucune page à servir</li>
</ul>
</section>
<summary>
- <p>La FAQ a été transférée vers le <a
+ <p>La FAQ a été transférée vers le <a
href="https://cwiki.apache.org/confluence/display/httpd/FAQ">Wiki du serveur HTTP</a>.</p>
</summary>
<title>Utilisation des gestionnaires d'Apache (handlers)</title>
<summary>
- <p>Ce document décrit l'utilisation des gestionnaires d'Apache (handlers).</p>
+ <p>Ce document décrit l'utilisation des gestionnaires d'Apache (handlers).</p>
</summary>
<section id="definition">
</related>
- <p>Un "gestionnaire" est une représentation interne à Apache de l'action
- qui doit être entreprise quand un fichier est appelé. En général, les
- fichiers ont des gestionnaires implicites, basés sur le type du fichier.
- Normalement, tous les fichiers sont traités simplement par le serveur,
- mais certains types de fichiers sont "gérés" séparément.</p>
+ <p>Un "gestionnaire" est une représentation interne à Apache de l'action
+ qui doit être entreprise quand un fichier est appelé. En général, les
+ fichiers ont des gestionnaires implicites, basés sur le type du fichier.
+ Normalement, tous les fichiers sont traités simplement par le serveur,
+ mais certains types de fichiers sont "gérés" séparément.</p>
- <p>Les gestionnaires peuvent aussi être configurés explicitement,
+ <p>Les gestionnaires peuvent aussi être configurés explicitement,
soit en fonction des extensions des noms de fichier, soit en fonction
du chemin du fichier,
- sans faire référence au type de fichier. Ceci a le double avantage d'être
- une solution plus élégante, et aussi d'autoriser à associer à la fois
+ sans faire référence au type de fichier. Ceci a le double avantage d'être
+ une solution plus élégante, et aussi d'autoriser à associer à la fois
un type <strong>et</strong> un gestionnaire avec un fichier. (Voir aussi <a
href="mod/mod_mime.html#multipleext">Fichiers avec extensions
multiples</a>.)</p>
- <p>Les gestionnaires peuvent être soit partie intégrante
- du serveur ou inclus dans un module, soit ajoutés à l'aide de la directive
+ <p>Les gestionnaires peuvent être soit partie intégrante
+ du serveur ou inclus dans un module, soit ajoutés à l'aide de la directive
<directive module="mod_actions">Action</directive>. Les gestionnaires
- intégrés dans la distribution standard se présentent comme suit :</p>
+ intégrés dans la distribution standard se présentent comme suit :</p>
<ul>
<li><strong>default-handler</strong>: envoie le fichier en utilisant
- le <code>default_handler()</code>, qui est le gestionnaire utilisé par
- défaut pour traiter les contenus statiques. (core)</li>
+ le <code>default_handler()</code>, qui est le gestionnaire utilisé par
+ défaut pour traiter les contenus statiques. (core)</li>
- <li><strong>send-as-is</strong>: envoie les fichiers avec en-têtes HTTP
+ <li><strong>send-as-is</strong>: envoie les fichiers avec en-têtes HTTP
tels quels. (<module>mod_asis</module>)</li>
<li><strong>cgi-script</strong>: traite le fichier comme un
script CGI. (<module>mod_cgi</module>)</li>
<li><strong>imap-file</strong>: Traite le fichier comme un ensemble
- de règles de descriptions d'images (imagemap).
+ de règles de descriptions d'images (imagemap).
(<module>mod_imagemap</module>)</li>
<li><strong>server-info</strong>: Extrait des informations sur la
configuration du serveur. (<module>mod_info</module>)</li>
- <li><strong>server-status</strong>: Rédige un rapport sur le statut
+ <li><strong>server-status</strong>: Rédige un rapport sur le statut
du serveur. (<module>mod_status</module>)</li>
<li><strong>type-map</strong>: Traite le fichier comme une description
- de type pour la négociation du contenu.
+ de type pour la négociation du contenu.
(<module>mod_negotiation</module>)</li>
</ul>
</section>
<title>Exemples</title>
<section id="example1">
- <title>Modification d'un contenu statique à l'aide d'un script CGI</title>
+ <title>Modification d'un contenu statique à l'aide d'un script CGI</title>
- <p>Les directives suivantes vont faire en sorte que les requêtes pour
- des fichiers possédant une extension <code>html</code> déclenchent
- l'exécution du script CGI <code>footer.pl</code>.</p>
+ <p>Les directives suivantes vont faire en sorte que les requêtes pour
+ des fichiers possédant une extension <code>html</code> déclenchent
+ l'exécution du script CGI <code>footer.pl</code>.</p>
<highlight language="config">
Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html
</highlight>
- <p>À ce moment-là, le script CGI se charge d'envoyer le document
- initialement demandé (référencé par la variable d'environnement
+ <p>À ce moment-là, le script CGI se charge d'envoyer le document
+ initialement demandé (référencé par la variable d'environnement
<code>PATH_TRANSLATED</code>) et d'effectuer tous ajout ou modification
voulus.</p>
</section>
<section id="example2">
- <title>Fichiers avec en-têtes HTTP</title>
+ <title>Fichiers avec en-têtes HTTP</title>
<p>Les directives suivantes vont activer le gestionnaire
- <code>send-as-is</code>, qui est utilisé pour les fichiers qui possèdent
- leurs propres en-têtes HTTP. Tous les fichiers situés dans le répertoire
- <code>/web/htdocs/asis/</code> seront traités par le gestionnaire
+ <code>send-as-is</code>, qui est utilisé pour les fichiers qui possèdent
+ leurs propres en-têtes HTTP. Tous les fichiers situés dans le répertoire
+ <code>/web/htdocs/asis/</code> seront traités par le gestionnaire
<code>send-as-is</code>, sans tenir compte de l'extension
de leur nom de fichier.</p>
</section>
</section>
<section id="programmer">
- <title>Note du développeur</title>
+ <title>Note du développeur</title>
- <p>Pour implémenter la fonctionnalité des gestionnaires, l'
+ <p>Pour implémenter la fonctionnalité des gestionnaires, l'
<a href="developer/API.html">API Apache</a> a fait l'objet d'un ajout
- que vous pourriez être amené à utiliser.
+ que vous pourriez être amené à utiliser.
- Plus précisément, un nouvel enregistrement a été ajouté à la structure
+ Plus précisément, un nouvel enregistrement a été ajouté à la structure
<code>request_rec</code> :</p>
<highlight language="c">
char *handler
</highlight>
- <p>Si vous voulez que votre module déclenche l'utilisation d'un
- gestionnaire, il vous suffit de définir <code>r->handler</code> avec
- le nom du gestionnaire à n'importe quel moment avant l'étape
+ <p>Si vous voulez que votre module déclenche l'utilisation d'un
+ gestionnaire, il vous suffit de définir <code>r->handler</code> avec
+ le nom du gestionnaire à n'importe quel moment avant l'étape
<code>invoke_handler</code>
- de la requête. Les gestionnaires sont implémentés comme auparavant,
- quoique l'on utilise le nom du gestionnaire à la place d'un type
+ de la requête. Les gestionnaires sont implémentés comme auparavant,
+ quoique l'on utilise le nom du gestionnaire à la place d'un type
de contenu. Bien que ce ne soit pas obligatoire, la convention de nommage
- des gestionnaires stipule l'utilisation d'un mot composé séparé par des
- tirets, sans slashes, afin de ne pas interférer avec l'espace de nommage
- des types de média.</p>
+ des gestionnaires stipule l'utilisation d'un mot composé séparé par des
+ tirets, sans slashes, afin de ne pas interférer avec l'espace de nommage
+ des types de média.</p>
</section>
</manualpage>
</p>
<table border="1">
<tr><th>Drapeau</th><th>Sigle</th><th>Description</th></tr>
- <tr><td> </td><td><em>Ok</em></td><td>Le serveur est disponible</td></tr>
- <tr><td> </td><td><em>Init</em></td><td>Le serveur a été initialisé</td></tr>
+ <tr><td> </td><td><em>Ok</em></td><td>Le serveur est disponible</td></tr>
+ <tr><td> </td><td><em>Init</em></td><td>Le serveur a été initialisé</td></tr>
<tr><td><code>D</code></td><td><em>Dis</em></td><td>Le serveur est
désactivé et n'accepte aucune requête ; il sera retesté automatiquement.</td></tr>
<tr><td><code>S</code></td><td><em>Stop</em></td><td>Le serveur a été
<manualpage metafile="invoking.xml.meta">
- <title>Démarrage d'Apache</title>
+ <title>Démarrage d'Apache</title>
<summary>
- <p>Sous Windows, Apache est habituellement lancé en tant que
- service. Pour plus de détails, voir <a
- href="platform/windows.html#winsvc">Démarrer Apache en tant
+ <p>Sous Windows, Apache est habituellement lancé en tant que
+ service. Pour plus de détails, voir <a
+ href="platform/windows.html#winsvc">Démarrer Apache en tant
que service</a>.</p>
<p>Sous Unix, le programme <program>httpd</program>
- est lancé en mode démon et s'exécute de manière permanente en
- arrière-plan pour gérer les requêtes. Ce document décrit comment invoquer
+ est lancé en mode démon et s'exécute de manière permanente en
+ arrière-plan pour gérer les requêtes. Ce document décrit comment invoquer
<program>httpd</program>.</p>
</summary>
-<seealso><a href="stopping.html">Arrêt et redémarrage</a></seealso>
+<seealso><a href="stopping.html">Arrêt et redémarrage</a></seealso>
<seealso><program>httpd</program></seealso>
<seealso><program>apachectl</program></seealso>
-<section id="startup"><title>Comment Apache démarre</title>
+<section id="startup"><title>Comment Apache démarre</title>
<p>Si la directive <directive module="mpm_common">Listen</directive>
- spécifiée dans le fichier de configuration est à sa valeur par défaut
- de 80 (ou tout autre port inférieur à 1024), il est nécessaire de
- posséder les privilèges root pour pouvoir démarrer apache, et lui
- permettre d'être associé à ce port privilégié. Lorsque le serveur est
- démarré, il effectue quelques opérations préliminaires
+ spécifiée dans le fichier de configuration est à sa valeur par défaut
+ de 80 (ou tout autre port inférieur à 1024), il est nécessaire de
+ posséder les privilèges root pour pouvoir démarrer apache, et lui
+ permettre d'être associé à ce port privilégié. Lorsque le serveur est
+ démarré, il effectue quelques opérations préliminaires
comme ouvrir ses fichiers de log, puis il lance plusieurs processus
- <em>enfants</em> qui ont pour rôle d'écouter et de répondre aux
- requêtes des clients. Le processus <code>httpd</code> principal
- continue à s'exécuter sous l'utilisateur root, tandis que les processus
- enfants s'exécutent sous un utilisateur aux privilèges restreints.
+ <em>enfants</em> qui ont pour rôle d'écouter et de répondre aux
+ requêtes des clients. Le processus <code>httpd</code> principal
+ continue à s'exécuter sous l'utilisateur root, tandis que les processus
+ enfants s'exécutent sous un utilisateur aux privilèges restreints.
Ceci s'effectue par la voie du
<a href="mpm.html">Module Multi-Processus (MPM)</a>.</p>
- <p>Il est recommandé d'utiliser le script de contrôle
- <program>apachectl</program> pour invoquer l'exécutable
- <program>httpd</program>. A cet effet, ce script définit certaines variables
- d'environnement nécessaires pour permettre à
- <program>httpd</program> de fonctionner correctement sous certains systèmes
+ <p>Il est recommandé d'utiliser le script de contrôle
+ <program>apachectl</program> pour invoquer l'exécutable
+ <program>httpd</program>. A cet effet, ce script définit certaines variables
+ d'environnement nécessaires pour permettre à
+ <program>httpd</program> de fonctionner correctement sous certains systèmes
d'exploitation.
<program>apachectl</program> accepte des arguments de ligne de
commande ;
- ainsi toute option de <program>httpd</program> peut aussi être utilisée avec
- <program>apachectl</program>. Vous pouvez aussi éditer directement le
+ ainsi toute option de <program>httpd</program> peut aussi être utilisée avec
+ <program>apachectl</program>. Vous pouvez aussi éditer directement le
script <program>apachectl</program> en modifiant la variable
- <code>HTTPD</code> située en début de script pour spécifier la
+ <code>HTTPD</code> située en début de script pour spécifier la
localisation du binaire <program>httpd</program> et tout argument de ligne
- de commande que vous souhaitez voir <em>systématiquement</em> présent.</p>
+ de commande que vous souhaitez voir <em>systématiquement</em> présent.</p>
- <p>La première chose qu'effectue <program>httpd</program> quand il est
- invoqué est de localiser et lire le <a
+ <p>La première chose qu'effectue <program>httpd</program> quand il est
+ invoqué est de localiser et lire le <a
href="configuring.html">fichier de configuration</a>
- <code>httpd.conf</code>. La localisation de ce fichier est définie à la
- compilation, mais il est possible d'en spécifier une autre à
- l'exécution en utilisant l'option de ligne de commande <code>-f</code> comme suit:</p>
+ <code>httpd.conf</code>. La localisation de ce fichier est définie à la
+ compilation, mais il est possible d'en spécifier une autre à
+ l'exécution en utilisant l'option de ligne de commande <code>-f</code> comme suit:</p>
<example>/usr/local/apache2/bin/apachectl -f
/usr/local/apache2/conf/httpd.conf</example>
- <p>Si tout se passe bien pendant le démarrage, le serveur va se dissocier
- du terminal et l'invite de commande réapparaîtra presque immédiatement.
- Ceci indique que le serveur a démarré et est en cours d'exécution.
- À partir de ce moment, vous pouvez utiliser votre navigateur pour vous connecter
- au serveur et afficher la page de test située dans le répertoire défini
+ <p>Si tout se passe bien pendant le démarrage, le serveur va se dissocier
+ du terminal et l'invite de commande réapparaîtra presque immédiatement.
+ Ceci indique que le serveur a démarré et est en cours d'exécution.
+ À partir de ce moment, vous pouvez utiliser votre navigateur pour vous connecter
+ au serveur et afficher la page de test située dans le répertoire défini
par la directive <directive module="core">DocumentRoot</directive></p>
</section>
-<section id="errors"><title>Erreurs en cours de démarrage</title>
+<section id="errors"><title>Erreurs en cours de démarrage</title>
- <p>Si un problème fatal survient pendant le démarrage
+ <p>Si un problème fatal survient pendant le démarrage
d'Apache, ce dernier va
- afficher un message décrivant le problème sur la console ou
- enregistrer ces informations dans le fichier défini par la directive
+ afficher un message décrivant le problème sur la console ou
+ enregistrer ces informations dans le fichier défini par la directive
<directive module="core">ErrorLog</directive> avant de quitter.
Un des messages d'erreur les plus courants est "<code>Unable
to bind to Port ...</code>". Ce message d'erreur est habituellement
- provoqué par :</p>
+ provoqué par :</p>
<ul>
- <li>Une tentative de démarrage du serveur avec un port privilégié sans
- être connecté root</li>
+ <li>Une tentative de démarrage du serveur avec un port privilégié sans
+ être connecté root</li>
- <li>Une tentative de démarrage du serveur alors qu'une autre instance
- d'Apache ou un autre serveur web est déjà associé au même port.</li>
+ <li>Une tentative de démarrage du serveur alors qu'une autre instance
+ d'Apache ou un autre serveur web est déjà associé au même port.</li>
</ul>
- <p>Pour plus d'instructions de dépannage, consultez la
+ <p>Pour plus d'instructions de dépannage, consultez la
<a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> Apache.</p>
</section>
-<section id="boot"><title>Lancement au démarrage du système</title>
+<section id="boot"><title>Lancement au démarrage du système</title>
<p>Si vous souhaitez que votre serveur soit automatiquement
- disponible après
- un redémarrage du système, vous devez ajouter un appel à
- <program>apachectl</program> à vos
- fichiers de démarrage système (en général <code>rc.local</code> ou un
- fichier dans un répertoire <code>rc.N</code>), ce qui démarrera Apache sous
+ disponible après
+ un redémarrage du système, vous devez ajouter un appel à
+ <program>apachectl</program> à vos
+ fichiers de démarrage système (en général <code>rc.local</code> ou un
+ fichier dans un répertoire <code>rc.N</code>), ce qui démarrera Apache sous
l'utilisateur root. Avant de faire ceci, assurez-vous que votre serveur
- soit correctement configuré en ce qui concerne la sécurité et les
- restrictions d'accès.</p>
+ soit correctement configuré en ce qui concerne la sécurité et les
+ restrictions d'accès.</p>
- <p>Le script <program>apachectl</program> est conçu pour fonctionner
+ <p>Le script <program>apachectl</program> est conçu pour fonctionner
comme un script d'initialisation SysV standard ; il accepte les arguments
<code>start</code>, <code>restart</code>, et <code>stop</code>
- et les traduit en signaux appropriés pour
- <program>httpd</program>, et il suffit en général d'installer
+ et les traduit en signaux appropriés pour
+ <program>httpd</program>, et il suffit en général d'installer
un lien vers
- <program>apachectl</program> dans le répertoire d'initialisation approprié.
- Mais prenez soin de vérifier les besoins exacts de votre système
- en la matière.</p>
+ <program>apachectl</program> dans le répertoire d'initialisation approprié.
+ Mais prenez soin de vérifier les besoins exacts de votre système
+ en la matière.</p>
</section>
-<section id="info"><title>Informations supplémentaires</title>
+<section id="info"><title>Informations supplémentaires</title>
- <p>Des informations supplémentaires à propos des options en ligne de
+ <p>Des informations supplémentaires à propos des options en ligne de
commande de <program>httpd</program> et <program>apachectl</program>
ainsi que d'autres programmes support inclus dans la distribution
sont disponibles sur la page
<title>Formats de mots de passe</title>
<summary>
- <p>Notes à propos des formats de chiffrement des mots de passe
- générés et reconnus par Apache.</p>
+ <p>Notes à propos des formats de chiffrement des mots de passe
+ générés et reconnus par Apache.</p>
</summary>
<section id="basic"><title>Authentification de base</title>
- <p>Voici les cinq formats de mots de passe qu'Apache reconnaît
+ <p>Voici les cinq formats de mots de passe qu'Apache reconnaît
pour l'authentification de base. Notez que tous les formats ne sont
- pas supportés par toutes les plates-formes :</p>
+ pas supportés par toutes les plates-formes :</p>
<dl>
<dt>bcrypt</dt>
- <dd>"$2y$" + résultat de l'algorithme de chiffrement crypt_blowfish. Voir le fichier
+ <dd>"$2y$" + résultat de l'algorithme de chiffrement crypt_blowfish. Voir le fichier
source APR <a
href="http://svn.apache.org/viewvc/apr/apr/trunk/crypto/crypt_blowfish.c?view=markup">crypt_blowfish.c</a>
- pour plus de détails à propos de cet algorithme.</dd>
+ pour plus de détails à propos de cet algorithme.</dd>
<dt>MD5</dt>
- <dd>"$apr1$" + le résultat d'un algorithme spécifique à Apache
- utilisant un condensé MD5 réitéré (1000 fois) de combinaisons
- variées du mot de passe et d'une source d'entropie sur 32 bits.
+ <dd>"$apr1$" + le résultat d'un algorithme spécifique à Apache
+ utilisant un condensé MD5 réitéré (1000 fois) de combinaisons
+ variées du mot de passe et d'une source d'entropie sur 32 bits.
Voir le fichier source APR <a
href="http://svn.apache.org/viewvc/apr/apr/trunk/crypto/apr_md5.c?view=markup">apr_md5.c</a>
- pour les détails de l'algorithme.</dd>
+ pour les détails de l'algorithme.</dd>
<dt>SHA1</dt>
- <dd>"{SHA}" + un condensé SHA-1 du mot de passe codé en
- Base64. Non sécurisé.</dd>
+ <dd>"{SHA}" + un condensé SHA-1 du mot de passe codé en
+ Base64. Non sécurisé.</dd>
<dt>CRYPT</dt>
<dd>Unix seulement. Utilise la fonction Unix traditionnelle
<code>crypt(3)</code> avec une source d'entropie sur 32 bits
- (seuls 12 bits sont utilisés), et seulement les 8 premiers
- caractères du mot de passe. Non sécurisé.</dd>
+ (seuls 12 bits sont utilisés), et seulement les 8 premiers
+ caractères du mot de passe. Non sécurisé.</dd>
- <dt>PLAIN TEXT (autrement dit <em>non chiffré</em>)</dt>
- <dd>Windows & Netware seulement. Non sécurisé.</dd>
+ <dt>PLAIN TEXT (autrement dit <em>non chiffré</em>)</dt>
+ <dd>Windows & Netware seulement. Non sécurisé.</dd>
</dl>
- <section><title>Générer des mots de passe avec htpasswd</title>
+ <section><title>Générer des mots de passe avec htpasswd</title>
<example><title>bcrypt</title>
$ htpasswd -nbB monNom Mon-Mot-de-passe<br />
</section>
<section>
- <title>Générer des mots de passe CRYPT et MD5 avec le programme
+ <title>Générer des mots de passe CRYPT et MD5 avec le programme
OpenSSL en ligne de commande</title>
- <p>OpenSSL connaît l'algorithme MD5 spécifique à Apache.</p>
+ <p>OpenSSL connaît l'algorithme MD5 spécifique à Apache.</p>
<example><title>MD5</title>
$ openssl passwd -apr1 Mon-Mot-de-passe<br />
<section>
<title>Valider des mots de passe CRYPT et MD5 avec le programme
OpenSSL en ligne de commande</title>
- <p>La source d'entropie pour un mot de passe CRYPT est constituée
- des deux premiers caractères (convertis en valeur binaire). Pour
- valider <code>Mon-Mot-de-passe</code> par rapport à
+ <p>La source d'entropie pour un mot de passe CRYPT est constituée
+ des deux premiers caractères (convertis en valeur binaire). Pour
+ valider <code>Mon-Mot-de-passe</code> par rapport à
<code>rqXexS6ZhobKA</code></p>
<example><title>CRYPT</title>
rqXexS6ZhobKA
</example>
- <p>Notez que spécifier <code>Mon-Mot-</code> au lieu de
- <code>Mon-Mot-de-passe</code> produira le même résultat car seuls
- les 8 premiers caractères des mots de passe CRYPT sont pris en
+ <p>Notez que spécifier <code>Mon-Mot-</code> au lieu de
+ <code>Mon-Mot-de-passe</code> produira le même résultat car seuls
+ les 8 premiers caractères des mots de passe CRYPT sont pris en
compte.</p>
<p>La source d'entropie pour un mot de passe MD5 se situe entre
- <code>$apr1$</code> et le caractère <code>$</code> suivant (sous
- la forme d'une valeur binaire codée en Base64 - au maximum 8
- caractères). Pour valider <code>Mon-Mot-de-passe</code> par rapport
- à <code>$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/</code></p>
+ <code>$apr1$</code> et le caractère <code>$</code> suivant (sous
+ la forme d'une valeur binaire codée en Base64 - au maximum 8
+ caractères). Pour valider <code>Mon-Mot-de-passe</code> par rapport
+ à <code>$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/</code></p>
<example><title>MD5</title>
$ openssl passwd -apr1 -salt r31..... Mon-Mot-de-passe<br />
</example>
</section>
- <section><title>Champs mot de passe de base de données pour
+ <section><title>Champs mot de passe de base de données pour
mod_dbd</title>
<p>La variante SHA1 constitue probablement le format le mieux
- approprié pour l'authentification DBD. Comme les fonctions SHA1 et
- Base64 sont en général disponibles, d'autres logiciels peuvent
- renseigner une base de données avec des mots de passe chiffrés
+ approprié pour l'authentification DBD. Comme les fonctions SHA1 et
+ Base64 sont en général disponibles, d'autres logiciels peuvent
+ renseigner une base de données avec des mots de passe chiffrés
utilisables par l'authentification basique d'Apache.</p>
- <p>Pour créer des mots de passe au format SHA1 pour
+ <p>Pour créer des mots de passe au format SHA1 pour
l'authentification de base d'Apache dans divers langages :</p>
<example><title>PHP</title>
<example>
<title>PostgreSQL (avec les fonctions contrib/pgcrypto
- installées)</title>
+ installées)</title>
'{SHA}'||encode(digest(password,'sha1'),'base64')
</example>
</section>
</section>
- <section id="digest"><title>Authentification à base de condensés - (digest)</title>
- <p>Apache ne reconnaît qu'un format pour les mots de passe
- d'authentification à base de condensés - le condensé MD5 de la
- chaîne <code>utilisateur:domaine-de-protection:mot-de-passe</code>
- sous la forme d'une chaîne de 32 caractères au format hexadécimal.
+ <section id="digest"><title>Authentification à base de condensés - (digest)</title>
+ <p>Apache ne reconnaît qu'un format pour les mots de passe
+ d'authentification à base de condensés - le condensé MD5 de la
+ chaîne <code>utilisateur:domaine-de-protection:mot-de-passe</code>
+ sous la forme d'une chaîne de 32 caractères au format hexadécimal.
<code>domaine-de-protection</code> est l'identifiant du domaine de
- protection de l'autorisation passé en argument à la directive
+ protection de l'autorisation passé en argument à la directive
<directive module="mod_authn_core">AuthName</directive> dans
httpd.conf.</p>
- <section><title>Champs de mot de passe de base de données pour
+ <section><title>Champs de mot de passe de base de données pour
mod_dbd</title>
- <p>Comme la fonction MD5 est en général disponible, d'autres
- logiciels peuvent renseigner une base de données avec des mots de
- passe chiffrés utilisables par l'authentification à base de
- condensés d'Apache.</p>
+ <p>Comme la fonction MD5 est en général disponible, d'autres
+ logiciels peuvent renseigner une base de données avec des mots de
+ passe chiffrés utilisables par l'authentification à base de
+ condensés d'Apache.</p>
- <p>Pour créer des mots de passe pour l'authentification à base de
- condensés d'Apache dans divers langages :</p>
+ <p>Pour créer des mots de passe pour l'authentification à base de
+ condensés d'Apache dans divers langages :</p>
<example><title>PHP</title>
md5($user . ':' . $realm . ':' .$password)
<indent>
s = "0" + s;
</indent>
- // La chaîne s contient le mot de passe chiffré
+ // La chaîne s contient le mot de passe chiffré
</example>
<example><title>ColdFusion</title>
<example>
<title>PostgreSQL (avec les fonctions contrib/pgcrypto
- installées)</title>
+ installées)</title>
encode(digest( user || ':' || realm || ':' || password , 'md5'), 'hex')
</example>
<parentdocument href="./">Documentations diverses</parentdocument>
- <title>Amélioration des performances</title>
+ <title>Amélioration des performances</title>
<summary>
<p>Il est dit dans la documentation d'Apache 1.3
- à propos de l'amélioration des performances :
+ à propos de l'amélioration des performances :
</p>
<blockquote><p>
- "Apache est un serveur web à vocation générale, conçu pour
- être non seulement efficace mais aussi rapide. Dans sa
- configuration de base, ses performances sont déjà
- relativement satisfaisantes. La plupart des sites possèdent
- une bande passante en sortie inférieure à 10 Mbits que le
- serveur Apache peut mettre pleinement à profit en utilisant un serveur à base
+ "Apache est un serveur web à vocation générale, conçu pour
+ être non seulement efficace mais aussi rapide. Dans sa
+ configuration de base, ses performances sont déjà
+ relativement satisfaisantes. La plupart des sites possèdent
+ une bande passante en sortie inférieure à 10 Mbits que le
+ serveur Apache peut mettre pleinement à profit en utilisant un serveur à base
de processeur Pentium bas de gamme."</p>
</blockquote>
- <p>Cette phrase ayant été écrite il y a plusieurs années,
- entre temps de nombreuses choses ont changé. D'une part, les
+ <p>Cette phrase ayant été écrite il y a plusieurs années,
+ entre temps de nombreuses choses ont changé. D'une part, les
serveurs sont devenus beaucoup plus rapides. D'autre part, de
- nombreux sites se voient maintenant allouée une bande passante
- en sortie bien supérieure à 10 Mbits. En outre, les applications
+ nombreux sites se voient maintenant allouée une bande passante
+ en sortie bien supérieure à 10 Mbits. En outre, les applications
web sont devenues beaucoup plus complexes. Les sites classiques
ne proposant que des pages du style brochure sont toujours
- présents, mais le web a souvent évolué vers une plateforme
- exécutant des traitements, et les webmasters peuvent maintenant
+ présents, mais le web a souvent évolué vers une plateforme
+ exécutant des traitements, et les webmasters peuvent maintenant
mettre en ligne des contenus dynamiques en Perl, PHP ou Java,
- qui exigent un niveau de performances bien supérieur.
+ qui exigent un niveau de performances bien supérieur.
</p>
- <p>C'est pourquoi en dépit des progrès en matière de bandes passantes
- allouées et de rapidité des serveurs, les performances
+ <p>C'est pourquoi en dépit des progrès en matière de bandes passantes
+ allouées et de rapidité des serveurs, les performances
des serveurs web et des applications web sont toujours un sujet
- d'actualité. C'est dans ce cadre que cette documentation s'attache à
- présenter de nombreux points concernant les performances des
+ d'actualité. C'est dans ce cadre que cette documentation s'attache à
+ présenter de nombreux points concernant les performances des
serveurs web.
</p>
</summary>
<section id="what-will-and-will-not-be-discussed">
- <title>Ce qui sera abordé et ce qui ne le sera pas</title>
- <p>Ce document se concentre sur l'amélioration des performances
+ <title>Ce qui sera abordé et ce qui ne le sera pas</title>
+ <p>Ce document se concentre sur l'amélioration des performances
via des options facilement accessibles, ainsi que sur les outils
de monitoring. Les outils de monitoring vous permettront de
surveiller le fonctionnement de votre serveur web afin de
- rassembler des informations à propos de ses performances et des
- éventuels problèmes qui s'y rapportent. Nous supposerons
- que votre budget n'est pas illimité ; c'est pourquoi les
- améliorations apportées le seront sans modifier l'infrastructure
- matérielle existante. Vous ne souhaitez probablement pas
- compiler vous-même votre serveur Apache, ni recompiler le noyau
- de votre système d'exploitation ; nous supposerons cependant que
- vous possédez quelques notions à propos du fichier de
+ rassembler des informations à propos de ses performances et des
+ éventuels problèmes qui s'y rapportent. Nous supposerons
+ que votre budget n'est pas illimité ; c'est pourquoi les
+ améliorations apportées le seront sans modifier l'infrastructure
+ matérielle existante. Vous ne souhaitez probablement pas
+ compiler vous-même votre serveur Apache, ni recompiler le noyau
+ de votre système d'exploitation ; nous supposerons cependant que
+ vous possédez quelques notions à propos du fichier de
configuration du serveur HTTP Apache.
</p>
<section id="monitoring-your-server">
<title>Monitoring de votre serveur</title>
- <p>Si vous envisagez de redimensionner ou d'améliorer les performances
- de votre serveur, vous devez tout d'abord observer la manière dont il
- fonctionne. En observant son fonctionnement en conditions réelles ou
- sous une charge créée artificiellement, vous serez en mesure
+ <p>Si vous envisagez de redimensionner ou d'améliorer les performances
+ de votre serveur, vous devez tout d'abord observer la manière dont il
+ fonctionne. En observant son fonctionnement en conditions réelles ou
+ sous une charge créée artificiellement, vous serez en mesure
d'extrapoler son fonctionnement sous une charge accrue, par exemple dans
- le cas où il serait mentionné sur Slashdot. </p>
+ le cas où il serait mentionné sur Slashdot. </p>
<section id="monitoring-tools">
<title>top
</title>
<p>L'outil top est fourni avec Linux et FreeBSD. Solaris
- quant à lui, fournit <code>prstat(1)</code>. Cet outil
- permet de rassembler de nombreuses données statistiques
- à propos du système et de chaque processus en cours
- d'exécution avant de les afficher de manière
- interactive sur votre terminal. Les données affichées
- sont rafraîchies toutes les secondes et varient en
+ quant à lui, fournit <code>prstat(1)</code>. Cet outil
+ permet de rassembler de nombreuses données statistiques
+ à propos du système et de chaque processus en cours
+ d'exécution avant de les afficher de manière
+ interactive sur votre terminal. Les données affichées
+ sont rafraîchies toutes les secondes et varient en
fonction de la plateforme, mais elles comportent en
- général la charge moyenne du système, le nombre de
- processus et leur état courant, le pourcentage de temps
- CPU(s) passé à exécuter le code système et utilisateur,
- et l'état de la mémoire virtuelle système. Les données
- affichées pour chaque processus sont en général
+ général la charge moyenne du système, le nombre de
+ processus et leur état courant, le pourcentage de temps
+ CPU(s) passé à exécuter le code système et utilisateur,
+ et l'état de la mémoire virtuelle système. Les données
+ affichées pour chaque processus sont en général
configurables et comprennent le nom et l'identifiant du
- processus, sa priorité et la valeur définie par nice,
- l'empreinte mémoire, et le pourcentage d'utilisation CPU.
+ processus, sa priorité et la valeur définie par nice,
+ l'empreinte mémoire, et le pourcentage d'utilisation CPU.
L'exemple suivant montre plusieurs processus httpd (avec
- les MPM worker et event) s'exécutant sur un système
+ les MPM worker et event) s'exécutant sur un système
Linux (Xen) :
</p>
69 root 15 -5 0 0 0 S 0 0.0 0:00.04 kblockd/1
70 root 15 -5 0 0 0 S 0 0.0 0:00.04 kblockd/2</pre></example>
- <p>Top est un merveilleux outil, même s'il est
+ <p>Top est un merveilleux outil, même s'il est
relativement gourmand en ressources (lorsqu'il
- s'exécute, son propre processus se trouve en général
+ s'exécute, son propre processus se trouve en général
dans le top dix des consommations CPU). Il est
- indispensable pour déterminer la taille d'un processus
- en cours d'exécution, information précieuse lorsque vous
- voudrez déterminer combien de processus httpd vous
- pourrez exécuter sur votre machine. La méthode pour
- effectuer ce calcul est décrite ici : <a
+ indispensable pour déterminer la taille d'un processus
+ en cours d'exécution, information précieuse lorsque vous
+ voudrez déterminer combien de processus httpd vous
+ pourrez exécuter sur votre machine. La méthode pour
+ effectuer ce calcul est décrite ici : <a
href="#sizing-maxClients">calculer MaxClients</a>. Top
- est cependant un outil interactif, et l'exécuter de
- manière continu présente peu ou pas d'avantage.
+ est cependant un outil interactif, et l'exécuter de
+ manière continu présente peu ou pas d'avantage.
</p>
</section>
<section id="free">
<title>free
</title>
<p>Cette commande n'est disponible que sous Linux. Elle
- indique la mémoire vive et l'espace de swap utilisés.
- Linux alloue la mémoire inutilisée en tant que cache du
- système de fichiers. La commande free montre
- l'utilisation de la mémoire avec et sans ce cache. On
- peut utiliser la commande free pour déterminer la
- quantité de mémoire utilisée par le système, comme
- décrit dans le paragraphe <a
+ indique la mémoire vive et l'espace de swap utilisés.
+ Linux alloue la mémoire inutilisée en tant que cache du
+ système de fichiers. La commande free montre
+ l'utilisation de la mémoire avec et sans ce cache. On
+ peut utiliser la commande free pour déterminer la
+ quantité de mémoire utilisée par le système, comme
+ décrit dans le paragraphe <a
href="#sizing-maxClients">calculer MaxClients</a>.
- L'affichage de la sortie de la commande free ressemble à
+ L'affichage de la sortie de la commande free ressemble à
ceci :
</p>
</title>
<p>Cette commande est disponible sur de nombreuses
plateformes de style Unix. Elle affiche un grand nombre
- de données système. Lancée sans argument, elle affiche
- une ligne d'état pour l'instant actuel. Lorsqu'on lui
- ajoute un chiffre, la ligne d'état actuelle est ajoutée à
- intervalles réguliers à l'affichage existant.
+ de données système. Lancée sans argument, elle affiche
+ une ligne d'état pour l'instant actuel. Lorsqu'on lui
+ ajoute un chiffre, la ligne d'état actuelle est ajoutée à
+ intervalles réguliers à l'affichage existant.
Par exemple, la commande
- <code>vmstat 5</code> ajoute la ligne d'état actuelle
+ <code>vmstat 5</code> ajoute la ligne d'état actuelle
toutes les 5 secondes. La commande vmstat affiche la
- quantité de mémoire virtuelle utilisée, la quantité de
- mémoire échangée avec l'espace de swap en entrée et en
- sortie à chaque seconde, le nombre de processus
- actuellement en cours d'exécution ou inactifs, le nombre
+ quantité de mémoire virtuelle utilisée, la quantité de
+ mémoire échangée avec l'espace de swap en entrée et en
+ sortie à chaque seconde, le nombre de processus
+ actuellement en cours d'exécution ou inactifs, le nombre
d'interruptions et de changements de contexte par
seconde, et le pourcentage d'utilisation du CPU.
</p>
0 0 0 0 186236 6704 37516 0 0 0 9 44 314 0 0 100
</pre></example>
- <p>Et voici cette même sortie pour un serveur en charge
- de cent connexions simultanées pour du contenu statique :
+ <p>Et voici cette même sortie pour un serveur en charge
+ de cent connexions simultanées pour du contenu statique :
</p>
<example><pre>
11 0 0 0 162780 6864 40436 0 0 0 61 6309 1165 33 28 40
</pre></example>
- <p>La première ligne indique des valeurs moyennes depuis
- le dernier redémarrage. Les lignes suivantes donnent des
- informations d'état à intervalles de 5 secondes. Le
- second argument demande à vmstat de générer 3 lignes
- d'état, puis de s'arrêter.
+ <p>La première ligne indique des valeurs moyennes depuis
+ le dernier redémarrage. Les lignes suivantes donnent des
+ informations d'état à intervalles de 5 secondes. Le
+ second argument demande à vmstat de générer 3 lignes
+ d'état, puis de s'arrêter.
</p>
</section>
<section id="se-toolkit">
- <title>Boîte à outils SE
+ <title>Boîte à outils SE
</title>
- <p>La boîte à outils SE est une solution de supervision
- pour Solaris. Son langage de programmation est basé sur
- le préprocesseur C et est fourni avec de nombreux
+ <p>La boîte à outils SE est une solution de supervision
+ pour Solaris. Son langage de programmation est basé sur
+ le préprocesseur C et est fourni avec de nombreux
exemples de scripts. Les informations fournies
- peuvent être exploitées en mode console ou en mode
- graphique. Cette boîte à outils peut aussi être programmée pour
- appliquer des règles aux données système. Avec l'exemple
+ peuvent être exploitées en mode console ou en mode
+ graphique. Cette boîte à outils peut aussi être programmée pour
+ appliquer des règles aux données système. Avec l'exemple
de script de la Figure 2, Zoom.se, des voyants verts,
oranges ou rouges s'allument lorsque certaines valeurs
- du système dépassent un seuil spécifié. Un autre script
+ du système dépassent un seuil spécifié. Un autre script
fourni, Virtual Adrian, permet d'affiner les
performances en tenant compte de ces valeurs.
</p>
- <p>Depuis sa création, de nombreux propriétaires se sont
- succédés à la tête de la boîte à outils SE, et elle a de
- ce fait largement évolué. Il semble qu'elle ait
- maintenant trouvé sa place chez Sunfreeware.com d'où
- elle peut être téléchargée gratuitement. Il n'y a qu'un
+ <p>Depuis sa création, de nombreux propriétaires se sont
+ succédés à la tête de la boîte à outils SE, et elle a de
+ ce fait largement évolué. Il semble qu'elle ait
+ maintenant trouvé sa place chez Sunfreeware.com d'où
+ elle peut être téléchargée gratuitement. Il n'y a qu'un
seul paquet pour Solaris 8, 9 et 10 sur SPARC et x86, et
- il inclut le code source. Le concepteur de la boîte à
- outils SE, Richard Pettit, a fondé une nouvelle sociéte,
+ il inclut le code source. Le concepteur de la boîte à
+ outils SE, Richard Pettit, a fondé une nouvelle sociéte,
Captive Metrics4, et a l'intention de mettre sur le
- marché un outil de supervision multiplateforme en Java basé sur
- les mêmes principes que la boîte à outils SE.
+ marché un outil de supervision multiplateforme en Java basé sur
+ les mêmes principes que la boîte à outils SE.
</p>
<section id="dtrace">
<title>DTrace
</title>
- <p>Etant donné que DTrace est disponible sous Solaris,
- FreeBSD et OS X, il serait intéressant de l'étudier. Il
+ <p>Etant donné que DTrace est disponible sous Solaris,
+ FreeBSD et OS X, il serait intéressant de l'étudier. Il
y a aussi le module mod_dtrace pour httpd.
</p>
<section id="mod_status">
<title>mod_status
</title>
- <p>Le module mod_status donne un aperçu des performances
- du serveur à un instant donné. Il génère une page HTML
+ <p>Le module mod_status donne un aperçu des performances
+ du serveur à un instant donné. Il génère une page HTML
comportant, entre autres, le nombre de processus Apache
- en cours d'exécution avec la quantité de données qu'ils
+ en cours d'exécution avec la quantité de données qu'ils
ont servies, ainsi que la charge CPU induite par httpd
- et le reste du système. L'Apache Software Foundation
- utilise elle-même <module>mod_status</module> pour son
+ et le reste du système. L'Apache Software Foundation
+ utilise elle-même <module>mod_status</module> pour son
propre <a href="http://apache.org/server-status">site
web</a>. Si vous ajoutez une directive
- <code>ExtendedStatus On</code> à votre fichier
+ <code>ExtendedStatus On</code> à votre fichier
<code>httpd.conf</code>, la page de
<module>mod_status</module> vous fournira d'avantage
d'informations, au prix d'une consommation de ressources
- légèrement supérieure par requête.
+ légèrement supérieure par requête.
</p>
<section id="web-server-log-files">
<title>Les journaux du serveur web
</title>
- <p>Le moyen le plus efficace pour vérifier la bonne santé et
- le niveau de performance de votre serveur consiste à
- surveiller et analyser les journaux écrits par httpd. La
+ <p>Le moyen le plus efficace pour vérifier la bonne santé et
+ le niveau de performance de votre serveur consiste à
+ surveiller et analyser les journaux écrits par httpd. La
surveillance du journal des erreurs vous permet de
- déterminer les sources d'erreurs, de détecter des attaques
- ou des problèmes de performance. L'analyse du journal des
- accès vous indique le niveau de charge de votre serveur,
+ déterminer les sources d'erreurs, de détecter des attaques
+ ou des problèmes de performance. L'analyse du journal des
+ accès vous indique le niveau de charge de votre serveur,
quelles sont les ressources les plus populaires, ainsi que
la provenance de vos utilisateurs. Une analyse historique des
- données de journalisation peut vous fournir des informations
- précieuses quant aux tendances d'utilisation de votre
- serveur au cours du temps, ce qui vous permet de prévoir les
- périodes où les besoins en performance risquent de dépasser
- les capacités du serveur.
+ données de journalisation peut vous fournir des informations
+ précieuses quant aux tendances d'utilisation de votre
+ serveur au cours du temps, ce qui vous permet de prévoir les
+ périodes où les besoins en performance risquent de dépasser
+ les capacités du serveur.
</p>
</title>
<p>Le journal des erreurs peut indiquer que le nombre
maximum de processus actifs ou de fichiers ouverts
- simultanément a été atteint. Le journal des erreurs
- signele aussi le lancement de processus supplémentaires selon un
- taux supérieur à la normale en réponse à
+ simultanément a été atteint. Le journal des erreurs
+ signele aussi le lancement de processus supplémentaires selon un
+ taux supérieur à la normale en réponse à
une augmentation soudaine de la charge. Lorsque le
- serveur démarre, le descripteur de fichier stderr est
- redirigé vers le journal des erreurs, si bien que toute
- erreur rencontrée par httpd après avoir ouvert ses
- fichiers journaux apparaîtra dans ce journal. Consulter
- fréquemment le journal des erreurs est donc une bonne
+ serveur démarre, le descripteur de fichier stderr est
+ redirigé vers le journal des erreurs, si bien que toute
+ erreur rencontrée par httpd après avoir ouvert ses
+ fichiers journaux apparaîtra dans ce journal. Consulter
+ fréquemment le journal des erreurs est donc une bonne
habitude.
</p>
<p>Lorsque Apache httpd n'a pas encore ouvert ses
- fichiers journaux, tout message d'erreur sera envoyé
+ fichiers journaux, tout message d'erreur sera envoyé
vers la sortie d'erreur standard stderr. Si vous
- démarrez httpd manuellement, ces messages d'erreur
- apparaîtront sur votre terminal, et vous pourrez les
- utiliser directement pour résoudre les problèmes de
- votre serveur. Si httpd est lancé via un script de
- démarrage, la destination de ces messages d'erreur
- dépend de leur conception.
- <code>/var/log/messages</code> est alors le premier fichier à
- consulter. Sous Windows, ces messages d'erreur précoces
- sont écrits dans le journal des évènements des
- applications, qui peut être visualisé via l'observateur
- d'évènements dans les outils d'administration.
+ démarrez httpd manuellement, ces messages d'erreur
+ apparaîtront sur votre terminal, et vous pourrez les
+ utiliser directement pour résoudre les problèmes de
+ votre serveur. Si httpd est lancé via un script de
+ démarrage, la destination de ces messages d'erreur
+ dépend de leur conception.
+ <code>/var/log/messages</code> est alors le premier fichier à
+ consulter. Sous Windows, ces messages d'erreur précoces
+ sont écrits dans le journal des évènements des
+ applications, qui peut être visualisé via l'observateur
+ d'évènements dans les outils d'administration.
</p>
<p>
- Le journal des erreurs est configuré via les
+ Le journal des erreurs est configuré via les
directives de configuration <directive
module="core">ErrorLog</directive> et <directive
module="core">LogLevel</directive>. Le journal des
erreurs de la configuration du serveur principal de
- httpd reçoit les messages d'erreur concernant
- l'ensemble du serveur : démarrage, arrêt, crashes,
- lancement de processus supplémentaires excessif,
+ httpd reçoit les messages d'erreur concernant
+ l'ensemble du serveur : démarrage, arrêt, crashes,
+ lancement de processus supplémentaires excessif,
etc... La directive <directive
- module="core">ErrorLog</directive> peut aussi être
- utilisée dans les blocs de configuration des
+ module="core">ErrorLog</directive> peut aussi être
+ utilisée dans les blocs de configuration des
serveurs virtuels. Le journal des erreurs d'un
- serveur virtuel ne reçoit que les messages d'erreur
- spécifiques à ce serveur virtuel, comme les erreurs
+ serveur virtuel ne reçoit que les messages d'erreur
+ spécifiques à ce serveur virtuel, comme les erreurs
d'authentification et les erreurs du style 'File not
Found'.
</p>
<p>Dans le cas d'un serveur accessible depuis Internet,
- attendez-vous à voir de nombreuses tentatives
+ attendez-vous à voir de nombreuses tentatives
d'exploitation et attaques de vers dans le journal des
erreurs. La plupart d'entre elles ciblent des serveurs
- autres qu'Apache, mais dans l'état actuel des choses,
+ autres qu'Apache, mais dans l'état actuel des choses,
les scripts se contentent d'envoyer leurs attaques vers
tout port ouvert, sans tenir compte du serveur web
- effectivement en cours d'exécution ou du type
- des applications installées. Vous pouvez bloquer ces
+ effectivement en cours d'exécution ou du type
+ des applications installées. Vous pouvez bloquer ces
tentatives d'attaque en utilisant un pare-feu ou le
module <a
href="http://www.modsecurity.org/">mod_security</a>,
- mais ceci dépasse la portée de cette discussion.
+ mais ceci dépasse la portée de cette discussion.
</p>
<p>
La directive <directive
- module="core">LogLevel</directive> permet de définir
- le niveau de détail des messages enregistrés dans
+ module="core">LogLevel</directive> permet de définir
+ le niveau de détail des messages enregistrés dans
les journaux. Il existe huit niveaux de
journalisation :
</p>
<p>emerg</p>
</td>
<td>
- <p>Urgence - le système est inutilisable.</p>
+ <p>Urgence - le système est inutilisable.</p>
</td>
</tr>
<tr>
<p>alert</p>
</td>
<td>
- <p>Une action doit être entreprise
- immédiatement.</p>
+ <p>Une action doit être entreprise
+ immédiatement.</p>
</td>
</tr>
<tr>
<p>notice</p>
</td>
<td>
- <p>Evènement normal, mais important.</p>
+ <p>Evènement normal, mais important.</p>
</td>
</tr>
<tr>
<p>debug</p>
</td>
<td>
- <p>Messages de débogage.</p>
+ <p>Messages de débogage.</p>
</td>
</tr>
</table>
- <p>Le niveau de journalisation par défaut est warn. Un
- serveur en production ne doit pas s'exécuter en mode
- debug, mais augmenter le niveau de détail dans le
- journal des erreurs peut s'avérer utile pour résoudre
- certains problèmes. A partir de la
+ <p>Le niveau de journalisation par défaut est warn. Un
+ serveur en production ne doit pas s'exécuter en mode
+ debug, mais augmenter le niveau de détail dans le
+ journal des erreurs peut s'avérer utile pour résoudre
+ certains problèmes. A partir de la
version 2.3.8, la directive <directive
- module="core">LogLevel</directive> peut être définie au
+ module="core">LogLevel</directive> peut être définie au
niveau de chaque module :
</p>
<p>
Dans cet exemple, l'ensemble du serveur est en mode
debug, sauf le module <module>mod_ssl</module>
- qui a tendance à être très bavard.
+ qui a tendance à être très bavard.
</p>
</section>
<section id="AccessLog">
- <title>Journal des accès
+ <title>Journal des accès
</title>
- <p>Apache httpd garde la trace de toutes les requêtes
- qu'il reçoit dans son journal des accès. En plus de
- l'heure et de la nature d'une requête, httpd peut
+ <p>Apache httpd garde la trace de toutes les requêtes
+ qu'il reçoit dans son journal des accès. En plus de
+ l'heure et de la nature d'une requête, httpd peut
enregistrer l'adresse IP du client, la date et l'heure
- de la requête, le résultat et quantité d'autres
- informations. Les différents formats de journaux sont
- documentés dans le manuel. Le fichier concerne par
- défaut le serveur principal, mais il peut être configuré
+ de la requête, le résultat et quantité d'autres
+ informations. Les différents formats de journaux sont
+ documentés dans le manuel. Le fichier concerne par
+ défaut le serveur principal, mais il peut être configuré
pour chaque serveur virtuel via les directives de
configuration <directive
module="mod_log_config">TransferLog</directive> ou
module="mod_log_config">CustomLog</directive>.
</p>
<p>De nombreux programmes libres ou commerciaux
- permettent d'analyser les journaux d'accès. Analog et
+ permettent d'analyser les journaux d'accès. Analog et
Webalyser sont des programmes d'analyse libres parmi les
plus populaires. L'analyse des journaux doit s'effectuer
hors ligne afin de ne pas surcharger le serveur web avec
le traitement des fichiers journaux. La plupart des
programmes d'analyse des journaux sont compatibles avec le format
de journal "Common". Voici une description des
- différents champs présents dans une entrée du journal :
+ différents champs présents dans une entrée du journal :
</p>
<p>195.54.228.42</p>
</td>
<td>
- <p>Adresse IP d'où provient la requête</p>
+ <p>Adresse IP d'où provient la requête</p>
</td>
</tr>
<tr>
<td>
- <p>Identité RFC 1413</p>
+ <p>Identité RFC 1413</p>
</td>
<td>
<p>-</p>
</td>
<td>
- <p>Identité de l'utilisateur distant renvoyée
- par son démon identd</p>
+ <p>Identité de l'utilisateur distant renvoyée
+ par son démon identd</p>
</td>
</tr>
<tr>
<p>[24/Mar/2007:23:05:11 -0400]</p>
</td>
<td>
- <p>Date et heure de la requête</p>
+ <p>Date et heure de la requête</p>
</td>
</tr>
<tr>
<td>
- <p>Requête</p>
+ <p>Requête</p>
</td>
<td>
<p>"GET /sander/feed/ HTTP/1.1"</p>
</td>
<td>
- <p>La requête proprement dite</p>
+ <p>La requête proprement dite</p>
</td>
</tr>
<tr>
<td>
- <p>Code d'état</p>
+ <p>Code d'état</p>
</td>
<td>
<p>200</p>
</td>
<td>
- <p>Code d'état renvoyé avec la réponse</p>
+ <p>Code d'état renvoyé avec la réponse</p>
</td>
</tr>
<tr>
<p>9747</p>
</td>
<td>
- <p>Total des octets transférés sans les
- en-têtes</p>
+ <p>Total des octets transférés sans les
+ en-têtes</p>
</td>
</tr>
</table>
<title>Rotation des fichiers journaux
</title>
<p>Il y a de nombreuses raisons pour mettre en oeuvre la
- rotation des fichiers journaux. Même si pratiquement
- plus aucun système d'exploitation n'impose une limite de
+ rotation des fichiers journaux. Même si pratiquement
+ plus aucun système d'exploitation n'impose une limite de
taille pour les fichiers de deux GigaOctets, avec le
temps, les fichiers journaux deviennent trop gros pour
- pouvoir être traités. En outre, toute analyse de journal
- ne doit pas être effectuée sur un fichier dans lequel le
- serveur est en train d'écrire. Une rotation périodique
+ pouvoir être traités. En outre, toute analyse de journal
+ ne doit pas être effectuée sur un fichier dans lequel le
+ serveur est en train d'écrire. Une rotation périodique
des fichiers journaux permet de faciliter leur analyse,
- et de se faire une idée plus précise des habitudes
+ et de se faire une idée plus précise des habitudes
d'utilisation.
</p>
- <p>Sur les systèmes unix, vous pouvez simplement
+ <p>Sur les systèmes unix, vous pouvez simplement
effectuer cette rotation en changeant le nom du fichier
- journal via la commande mv. Le serveur continuera à
- écrire dans le fichier ouvert même s'il a changé de nom.
- Lorsque vous enverrez un signal de redémarrage
+ journal via la commande mv. Le serveur continuera à
+ écrire dans le fichier ouvert même s'il a changé de nom.
+ Lorsque vous enverrez un signal de redémarrage
"Graceful" au serveur, il ouvrira un nouveau fichier
- journal avec le nom configuré par défaut. Par exemple,
- vous pouvez écrire un script de ce style pour cron :
+ journal avec le nom configuré par défaut. Par exemple,
+ vous pouvez écrire un script de ce style pour cron :
</p>
<p>Cette approche fonctionne aussi sous Windows, mais
avec moins de souplesse. Alors que le processus httpd de
- votre serveur sous Windows continuera à écrire dans le
- fichier journal une fois ce dernier renommé, le service
- Windows qui exécute Apache n'est pas en mesure
- d'effectuer un redémarrage graceful. Sous Windows, le
- redémarrage d'un service consiste simplement à l'arrêter
- et à le démarrer à nouveau, alors qu'avec un redémarrage
+ votre serveur sous Windows continuera à écrire dans le
+ fichier journal une fois ce dernier renommé, le service
+ Windows qui exécute Apache n'est pas en mesure
+ d'effectuer un redémarrage graceful. Sous Windows, le
+ redémarrage d'un service consiste simplement à l'arrêter
+ et à le démarrer à nouveau, alors qu'avec un redémarrage
graceful, les processus enfants terminent
- le traitement des requêtes en cours avant de s'arrêter,
- et le serveur httpd est alors immédiatement à
- nouveau disponible pour traiter les nouvelles requêtes.
- Sous Windows, le processus d'arrêt/redémarrage du
- service interrompt les traitements de requêtes en cours,
- et le serveur demeure indisponible jusqu'à ce qu'il ait
- terminé son redémarrage. Vous devez donc tenir compte de
+ le traitement des requêtes en cours avant de s'arrêter,
+ et le serveur httpd est alors immédiatement à
+ nouveau disponible pour traiter les nouvelles requêtes.
+ Sous Windows, le processus d'arrêt/redémarrage du
+ service interrompt les traitements de requêtes en cours,
+ et le serveur demeure indisponible jusqu'à ce qu'il ait
+ terminé son redémarrage. Vous devez donc tenir compte de
toutes ces contraintes lorsque vous planifiez un
- redémarrage.
+ redémarrage.
</p>
<p>
- Une seconde approche consiste à utiliser la
+ Une seconde approche consiste à utiliser la
redirection des logs. Les directives <directive
module="mod_log_config">CustomLog</directive>,
<directive
module="mod_log_config">TransferLog</directive> ou
<directive module="core">ErrorLog</directive>
- permettent de rediriger les données de journalisation
- vers tout programme via le caractère pipe
+ permettent de rediriger les données de journalisation
+ vers tout programme via le caractère pipe
(<code>|</code>) comme dans cet exemple :
</p>
</example>
<p>Le programme cible de la redirection recevra alors les
- données de journalisation d'Apache sur son entrée
+ données de journalisation d'Apache sur son entrée
standard stdin, et pourra en faire ce qu'il voudra. Le
programme rotatelogs fourni avec Apache effectue une
- rotation des journaux de manière transparente en
- fonction du temps ou de la quantité de données écrites,
+ rotation des journaux de manière transparente en
+ fonction du temps ou de la quantité de données écrites,
et archive l'ancien fichier journal en ajoutant un
- suffixe d'horodatage à son nom. Cependant, si cette
- méthode fonctionne de manière satisfaisante sur les
- plateformes de style unix, il n'en est pas de même sous
+ suffixe d'horodatage à son nom. Cependant, si cette
+ méthode fonctionne de manière satisfaisante sur les
+ plateformes de style unix, il n'en est pas de même sous
Windows.
</p>
<section id="logging-and-performance">
<title>Journalisation et performances
</title>
- <p>L'écriture d'entrées dans les fichiers journaux est
+ <p>L'écriture d'entrées dans les fichiers journaux est
consommatrice de ressources, mais l'importance de ces
- données est telle qu'il est fortement déconseillé de
- désactiver la journalisation. Pour optimiser les
+ données est telle qu'il est fortement déconseillé de
+ désactiver la journalisation. Pour optimiser les
performances, vous devez enregistrer vos journaux sur un
- disque physique différent de celui où se situe votre
- site web car les modes d'accès sont très différents. La
- lecture de données sur un disque possède un caractère
- essentiellement aléatoire, alors que l'écriture dans les
- fichiers journaux s'effectue de manière séquentielle.
+ disque physique différent de celui où se situe votre
+ site web car les modes d'accès sont très différents. La
+ lecture de données sur un disque possède un caractère
+ essentiellement aléatoire, alors que l'écriture dans les
+ fichiers journaux s'effectue de manière séquentielle.
</p>
<p>
- Ne définissez jamais la directive <directive
- module="core">LogLevel</directive> à debug pour un
+ Ne définissez jamais la directive <directive
+ module="core">LogLevel</directive> à debug pour un
serveur en production. En effet, lorsque ce niveau de
- journalisation est défini, une grande quantité de
- données est écrite dans le journal des erreurs, y
- compris, dans le cas d'un accès SSL, toutes les
- opérations de lecture/écriture de la négociation de la
- connexion. Les implications en matière de performances
- sont donc importantes et vous devez plutôt utiliser le
+ journalisation est défini, une grande quantité de
+ données est écrite dans le journal des erreurs, y
+ compris, dans le cas d'un accès SSL, toutes les
+ opérations de lecture/écriture de la négociation de la
+ connexion. Les implications en matière de performances
+ sont donc importantes et vous devez plutôt utiliser le
niveau de journalisation warn.
</p>
- <p>Si votre serveur possède plus d'un serveur virtuel,
- il est conseillé d'attribuer un journal des accès séparé à
+ <p>Si votre serveur possède plus d'un serveur virtuel,
+ il est conseillé d'attribuer un journal des accès séparé à
chacun d'entre eux, ce qui a pour effet de faciliter son
- exploitation ultérieure. Par contre, si votre serveur
- possède un grand nombre de serveurs virtuels, le nombre
- de fichiers journaux à ouvrir va représenter une
+ exploitation ultérieure. Par contre, si votre serveur
+ possède un grand nombre de serveurs virtuels, le nombre
+ de fichiers journaux à ouvrir va représenter une
consommation de ressources importante pour votre
- système, et il sera peut-être alors plus judicieux
- d'utiliser un seul fichier journal avec l'aménagement
- suivant : utiliser l'élément de format <code>%v</code>
- en tête de votre directive <directive
+ système, et il sera peut-être alors plus judicieux
+ d'utiliser un seul fichier journal avec l'aménagement
+ suivant : utiliser l'élément de format <code>%v</code>
+ en tête de votre directive <directive
module="mod_log_config">LogFormat</directive> (et de
votre directive <directive
module="core">ErrorLog</directive> depuis la version
2.3.8) afin que httpd enregistre le nom du serveur
- virtuel qui traite la requête ou l'erreur au début de
- chaque entrée du journal. Un simple script Perl peut
- alors éclater le journal en fichiers spécifiques à
- chaque serveur virtuel après sa rotation ; Apache
- fournit un tel script dans le répertoire
+ virtuel qui traite la requête ou l'erreur au début de
+ chaque entrée du journal. Un simple script Perl peut
+ alors éclater le journal en fichiers spécifiques à
+ chaque serveur virtuel après sa rotation ; Apache
+ fournit un tel script dans le répertoire
<code>support/split-logfile</code>.
</p>
<p>
Vous pouvez aussi utiliser la directive <directive
module="mod_log_config">BufferedLogs</directive>
- pour qu'Apache conserve en mémoire plusieurs entrées
- de journal avant de les écrire sur disque. Gardez
- cependant à l'esprit que si les performances peuvent
- s'en trouver améliorées, la chronologie des
- évènements enregistrés peut quant à elle s'en
- trouver affectée.
+ pour qu'Apache conserve en mémoire plusieurs entrées
+ de journal avant de les écrire sur disque. Gardez
+ cependant à l'esprit que si les performances peuvent
+ s'en trouver améliorées, la chronologie des
+ évènements enregistrés peut quant à elle s'en
+ trouver affectée.
</p>
<title>Mise en oeuvre d'une charge de test
</title>
<p>Il est interessant de mettre en oeuvre une charge de test
- afin d'évaluer les performances du système en conditions
- réelles de fonctionnement. A cet effet, il existe des
+ afin d'évaluer les performances du système en conditions
+ réelles de fonctionnement. A cet effet, il existe des
paquets commerciaux comme <a
href="http://learnloadrunner.com/">LoadRunner</a>, mais
- aussi de nombreux outils libres permettant de générer une
+ aussi de nombreux outils libres permettant de générer une
charge de test pour votre serveur web.
</p>
<ul>
- <li>Apache est fourni avec un programme de test nommé ab
- (initiales de Apache Bench). Ce dernier peut générer une
- charge de serveur web consistant à demander le même
- fichier de manière répétitive à un rythme rapide. Vous
- pouvez spécifier le nombre de connexions simultanées, et
- choisir entre une durée de fonctionnement ou un nombre
- de requêtes.
+ <li>Apache est fourni avec un programme de test nommé ab
+ (initiales de Apache Bench). Ce dernier peut générer une
+ charge de serveur web consistant à demander le même
+ fichier de manière répétitive à un rythme rapide. Vous
+ pouvez spécifier le nombre de connexions simultanées, et
+ choisir entre une durée de fonctionnement ou un nombre
+ de requêtes.
</li>
- <li>http load11 est un autre exemple de générateur de
+ <li>http load11 est un autre exemple de générateur de
charge libre. Ce programme fonctionne avec un ficher
- d'URLs et peut être compilé avec le support SSL.
+ d'URLs et peut être compilé avec le support SSL.
</li>
- <li>L'Apache Software Foundation propose un outil nommé
- flood12. Flood est un programme assez sophistiqué que
+ <li>L'Apache Software Foundation propose un outil nommé
+ flood12. Flood est un programme assez sophistiqué que
l'on configure via un fichier XML.
</li>
<li>Pour finir, JMeter13, un sous-projet de Jakarta, est
- un outil de test en charge entièrement en Java. Alors
- que les premières versions de cette application étaient
+ un outil de test en charge entièrement en Java. Alors
+ que les premières versions de cette application étaient
lentes et difficiles d'utilisation, la version 2.1.1
- actuelle semble être plus souple d'utilisation et
+ actuelle semble être plus souple d'utilisation et
efficace.
</li>
<li>
- <p>Des projets externes à l'ASF et réputés
+ <p>Des projets externes à l'ASF et réputés
relativement corrects : grinder, httperf, tsung, <a
href="http://funkload.nuxeo.org/">FunkLoad</a>.
</p>
</li>
</ul>
- <p>Lorsque vous appliquez une charge de test à votre serveur
- web, gardez à l'esprit que si ce dernier est en production,
- la charge de test peut en affecter négativement les
- performances. En outre, le transfert de données
- supplémentaires induit peut être comptabilisé dans le
- quota mensuel qui vous a été éventuellement alloué.
+ <p>Lorsque vous appliquez une charge de test à votre serveur
+ web, gardez à l'esprit que si ce dernier est en production,
+ la charge de test peut en affecter négativement les
+ performances. En outre, le transfert de données
+ supplémentaires induit peut être comptabilisé dans le
+ quota mensuel qui vous a été éventuellement alloué.
</p>
<section id="apache-configuration">
<title>Configuration de httpd
</title>
- <p>httpd version 2.2 est par défaut un serveur web avec des
- processus enfants lancés au préalable. Au démarrage du
+ <p>httpd version 2.2 est par défaut un serveur web avec des
+ processus enfants lancés au préalable. Au démarrage du
serveur, le processus parent lance un certain nombre de
- processus enfants et ce sont eux qui seront chargés de traiter les
- requêtes. Mais avec httpd version 2.0 est apparu le concept
- de module multi-process (MPM). Les développeurs purent alors
- écrire des MPMs qui pouvaient fonctionner avec l'architecture
- à base de processus ou de threads de leur système
- d'exploitation spécifique. Apache 2 est fourni avec des MPMs
- spécifiques pour Windows, OS/2, Netware et BeOS. Pour les
+ processus enfants et ce sont eux qui seront chargés de traiter les
+ requêtes. Mais avec httpd version 2.0 est apparu le concept
+ de module multi-process (MPM). Les développeurs purent alors
+ écrire des MPMs qui pouvaient fonctionner avec l'architecture
+ à base de processus ou de threads de leur système
+ d'exploitation spécifique. Apache 2 est fourni avec des MPMs
+ spécifiques pour Windows, OS/2, Netware et BeOS. Pour les
plateformes de style unix, les deux MPMS les plus connus
- sont Prefork et Worker. Le MPM Prefork offre le même modèle
- de processus enfants prélancés que celui d'Apache 1.3. Le
- MPM Worker quant à lui, lance un nombre de processus enfants
- moins important, mais attribue à chacun d'entre eux un
- certain nombre de threads pour traiter les requêtes. Avec la
- version 2.4, le MPM n'est plus défini à la compilation,
- mais peut être chargé à l'exécution via la directive
+ sont Prefork et Worker. Le MPM Prefork offre le même modèle
+ de processus enfants prélancés que celui d'Apache 1.3. Le
+ MPM Worker quant à lui, lance un nombre de processus enfants
+ moins important, mais attribue à chacun d'entre eux un
+ certain nombre de threads pour traiter les requêtes. Avec la
+ version 2.4, le MPM n'est plus défini à la compilation,
+ mais peut être chargé à l'exécution via la directive
<directive module="core">LoadModule</directive>. Le MPM par
- défaut pour la version 2.4 est le MPM event.
+ défaut pour la version 2.4 est le MPM event.
</p>
- <p>Le nombre maximum de process, à savoir le nombre de processus
- enfants prélancés et/ou de threads, donne une approximation
- du nombre de requêtes que votre serveur peut traiter
- simultanément. Ce n'est cependant qu'une estimation car le
+ <p>Le nombre maximum de process, à savoir le nombre de processus
+ enfants prélancés et/ou de threads, donne une approximation
+ du nombre de requêtes que votre serveur peut traiter
+ simultanément. Ce n'est cependant qu'une estimation car le
noyau peut mettre en file d'attente des tentatives de
- connexion à votre serveur. Lorsque votre site approche de la
+ connexion à votre serveur. Lorsque votre site approche de la
saturation et si le nombre maximum de process est atteint, la
machine n'impose pas de limite absolue au
- delà de laquelle les clients se verront refuser l'accès.
- Cependant, lorsque les requêtes commencent à être mises en
- file d'attente, les performances du système se dégradent
+ delà de laquelle les clients se verront refuser l'accès.
+ Cependant, lorsque les requêtes commencent à être mises en
+ file d'attente, les performances du système se dégradent
rapidement.
</p>
- <p>Enfin, si le serveur httpd en question n'exécute aucun
+ <p>Enfin, si le serveur httpd en question n'exécute aucun
code tiers via <code>mod_php</code>, <code>mod_perl</code>,
etc..., nous recommandons l'utilisation de
- <module outdated="true">mpm_event</module>. Ce MPM est idéal pour les
- situations où httpd sert d'intermédiaire entre les clients
- et des serveurs d'arrière-plan qui accomplissent le travail
+ <module outdated="true">mpm_event</module>. Ce MPM est idéal pour les
+ situations où httpd sert d'intermédiaire entre les clients
+ et des serveurs d'arrière-plan qui accomplissent le travail
proprement dit (par exemple en mode mandataire ou cache).
</p>
<title>MaxClients
</title>
<p>La directive <code>MaxClients</code> permet de
- spécifier le nombre maximum de process que votre serveur
- pourra créer. Deux autres directives lui sont associées
+ spécifier le nombre maximum de process que votre serveur
+ pourra créer. Deux autres directives lui sont associées
: <code>MinSpareServers</code> et
<code>MaxSpareServers</code>, qui permettent d'encadrer
- le nombre de process que httpd garde en réserve pour
- traiter les requêtes. Le nombre total de process que
- httpd peut créer peut
- être défini via la directive <code>ServerLimit</code>.
+ le nombre de process que httpd garde en réserve pour
+ traiter les requêtes. Le nombre total de process que
+ httpd peut créer peut
+ être défini via la directive <code>ServerLimit</code>.
</p>
<section id="spinning-threads">
<title>Rotation des threads
</title>
- <p>Les directives ci-dessus suffisent pour définir les
+ <p>Les directives ci-dessus suffisent pour définir les
limites des nombres de process dans le cas du MPM Prefork.
- Cependant, si vous utilisez un MPM à base de threads, la
- situation est un peu plus compliquée. Les MPMs à base de
+ Cependant, si vous utilisez un MPM à base de threads, la
+ situation est un peu plus compliquée. Les MPMs à base de
threads supportent la directive
<code>ThreadsPerChild</code>. httpd impose le fait que
- <code>MaxClients</code> doit être divisible par
+ <code>MaxClients</code> doit être divisible par
<code>ThreadsPerChild</code>. Si les valeurs que vous
- attribuez à ces deux directives ne respectent pas cette
- règle, httpd affichera un message d'erreur et corrigera
+ attribuez à ces deux directives ne respectent pas cette
+ règle, httpd affichera un message d'erreur et corrigera
la valeur de la directive <code>ThreadsPerChild</code>
- en la diminuant jusqu'à ce que la valeur de la directive
+ en la diminuant jusqu'à ce que la valeur de la directive
<code>MaxClients</code> soit divisible par elle.
</p>
<section id="sizing-maxClients">
<title>Choix de la valeur de MaxClients
</title>
- <p>Idéalement, le nombre maximum de processus devrait
- être choisi de façon à ce que toute la mémoire système
- soit utilisée, sans la dépasser. En effet, si votre
- système est surchargé au point de devoir faire appel de
- manière intensive au swap (utilisation de la mémoire
- disque), les performances vont se dégrader rapidement.
- La formule permettant de déterminer la valeur de
+ <p>Idéalement, le nombre maximum de processus devrait
+ être choisi de façon à ce que toute la mémoire système
+ soit utilisée, sans la dépasser. En effet, si votre
+ système est surchargé au point de devoir faire appel de
+ manière intensive au swap (utilisation de la mémoire
+ disque), les performances vont se dégrader rapidement.
+ La formule permettant de déterminer la valeur de
<directive module="mpm_common"
name="MaxRequestWorkers">MaxClients</directive>
est assez simple :
</p>
<example>
- MaxClients = (RAM totale − RAM système − RAM pour
- les programmes externes) divisé par la RAM nécessaire pour
+ MaxClients = (RAM totale − RAM système − RAM pour
+ les programmes externes) divisé par la RAM nécessaire pour
chaque processus enfant.
</example>
- <p>L'observation est la meilleure manière de déterminer
- les différentes quantités de mémoire allouées au
- système, aux programmes externes et aux processus httpd
- : à cet effet, vous pouvez utiliser les commandes top et
- free décrites plus haut pour étudier l'empreinte mémoire
- du système lorsque le serveur web n'est pas en cours
- d'exécution. Vous pouvez aussi étudier l'empreinte d'un
+ <p>L'observation est la meilleure manière de déterminer
+ les différentes quantités de mémoire allouées au
+ système, aux programmes externes et aux processus httpd
+ : à cet effet, vous pouvez utiliser les commandes top et
+ free décrites plus haut pour étudier l'empreinte mémoire
+ du système lorsque le serveur web n'est pas en cours
+ d'exécution. Vous pouvez aussi étudier l'empreinte d'un
processus type du serveur web via la commande top ; en
- effet, la plupart des implémentations de cette commande
- présentent une colonne Mémoire résidente (RSS - Resident
- Size) et Mémoire partagée (Shared Memory).
- </p>
- <p>La différence entre ces deux colonnes est la
- quantité de mémoire par processus. Le segment de mémoire
- partagée n'existe effectivement qu'une seule fois, et
- est utilisé par le code et les bibliothèques chargées et
- la concurrence inter-processus (ou tableau de résultat -
- scoreboard) géré par Apache. La quantité de mémoire
- utilisée par chaque processus dépend fortement du nombre
- et du type de modules utilisés. La meilleure façon d'en
- déterminer les besoins consiste à générer une charge
- type pour votre site web et à observer l'importance que
+ effet, la plupart des implémentations de cette commande
+ présentent une colonne Mémoire résidente (RSS - Resident
+ Size) et Mémoire partagée (Shared Memory).
+ </p>
+ <p>La différence entre ces deux colonnes est la
+ quantité de mémoire par processus. Le segment de mémoire
+ partagée n'existe effectivement qu'une seule fois, et
+ est utilisé par le code et les bibliothèques chargées et
+ la concurrence inter-processus (ou tableau de résultat -
+ scoreboard) géré par Apache. La quantité de mémoire
+ utilisée par chaque processus dépend fortement du nombre
+ et du type de modules utilisés. La meilleure façon d'en
+ déterminer les besoins consiste à générer une charge
+ type pour votre site web et à observer l'importance que
prennent les processus httpd.
</p>
<p>La RAM pour les programmes externes comprend
- principalement la mémoire utilisée pour les programmes
- CGI et les scripts qui s'exécutent indépendamment des
+ principalement la mémoire utilisée pour les programmes
+ CGI et les scripts qui s'exécutent indépendamment des
processus httpd. Par contre, si vous utilisez une
- machine virtuelle Java qui exécute Tomcat sur le même
- serveur, cette dernière va aussi nécessiter une quantité
- de mémoire significative. En conséquence, la formule
- ci-dessus qui sert à calculer la valeur maximale de
- <code>MaxClients</code> permet d'effectuer une première approche,
+ machine virtuelle Java qui exécute Tomcat sur le même
+ serveur, cette dernière va aussi nécessiter une quantité
+ de mémoire significative. En conséquence, la formule
+ ci-dessus qui sert à calculer la valeur maximale de
+ <code>MaxClients</code> permet d'effectuer une première approche,
mais ne constitue en aucun cas une science exacte. En
cas de doute, soyez pragmatique et utilisez une valeur assez
basse pour <code>MaxClients</code>. Le noyau Linux
- réserve une certaine quantité de mémoire pour la mise en
- cache des accès disque. Sous Solaris par contre, il faut disposer
- de suffisamment de mémoire RAM pour créer un processus,
- et si ce n'est pas le cas, httpd va démarrer avec un
+ réserve une certaine quantité de mémoire pour la mise en
+ cache des accès disque. Sous Solaris par contre, il faut disposer
+ de suffisamment de mémoire RAM pour créer un processus,
+ et si ce n'est pas le cas, httpd va démarrer avec un
message d'erreur du style "No space left on device" dans
- le journal des erreurs, et sera incapable de créer
+ le journal des erreurs, et sera incapable de créer
d'autres processus httpd enfants ; une valeur trop
- élevée pour <code>MaxClients</code> constituera alors
- réellement un désavantage.
+ élevée pour <code>MaxClients</code> constituera alors
+ réellement un désavantage.
</p>
</section>
<title>Choisir votre MPM
</title>
<p>La commutation entre threads est plus
- aisée pour le système, et ceux-ci consomment moins de
+ aisée pour le système, et ceux-ci consomment moins de
ressources que les processus ; c'est la raison
- principale pour laquelle il est recommandé de choisir un
- MPM threadé. Et
- ceci est encore plus flagrant pour certains systèmes
+ principale pour laquelle il est recommandé de choisir un
+ MPM threadé. Et
+ ceci est encore plus flagrant pour certains systèmes
d'exploitation que pour d'autres. Par exemple, sous
Solaris ou AIX, la manipulation des processus est assez
- lourde en termes de ressources système ; l'utilisation
- d'un MPM threadé est donc tout à fait indiquée pour ces
- systèmes. Sous Linux en revanche, l'implémentation des
+ lourde en termes de ressources système ; l'utilisation
+ d'un MPM threadé est donc tout à fait indiquée pour ces
+ systèmes. Sous Linux en revanche, l'implémentation des
threads utilise en fait un processus par thread. Les
- processus Linux sont assez légers, mais cela signifie qu'un
- MPM threadé présentera ici un gain en performance
- moindre que sous d'autres systèmes.
+ processus Linux sont assez légers, mais cela signifie qu'un
+ MPM threadé présentera ici un gain en performance
+ moindre que sous d'autres systèmes.
</p>
<p>Dans certaines situations cependant, l'utilisation
- d'un MPM threadé peut induire des problèmes de
- stabilité. Par exemple, si un processus enfant du MPM
+ d'un MPM threadé peut induire des problèmes de
+ stabilité. Par exemple, si un processus enfant du MPM
prefork se crashe, au plus une connexion client sera
- affectée ; par contre, si un processus enfant threadé se
+ affectée ; par contre, si un processus enfant threadé se
crashe, ce sont tous les threads de ce processus qui
- vont se crasher à leur tour, ce qui signifie que tous
- les clients qui étaient servis par ce processus verront
- leur connexion interrompue. De plus, certains problèmes
- de sécurité des threads ("thread-safety")
- peuvent apparaître, particulièrement avec les
- bibliothèques tierces. Avec les applications threadées,
- les différents threads peuvent avoir accès aux mêmes
+ vont se crasher à leur tour, ce qui signifie que tous
+ les clients qui étaient servis par ce processus verront
+ leur connexion interrompue. De plus, certains problèmes
+ de sécurité des threads ("thread-safety")
+ peuvent apparaître, particulièrement avec les
+ bibliothèques tierces. Avec les applications threadées,
+ les différents threads peuvent avoir accès aux mêmes
variables sans distinction, sans savoir si une variable
- n'a pas été modifiée par un autre thread.
+ n'a pas été modifiée par un autre thread.
</p>
- <p>Ce problème a fait l'objet d'un point sensible au
- sein de la communauté PHP car Le processeur PHP repose
- fortement sur des bibliothèques tierces, et il n'est pas
- garanti que la totalité d'entre elles soient
+ <p>Ce problème a fait l'objet d'un point sensible au
+ sein de la communauté PHP car Le processeur PHP repose
+ fortement sur des bibliothèques tierces, et il n'est pas
+ garanti que la totalité d'entre elles soient
"thread-safe". Bonne nouvelle cependant : si vous
- exécutez Apache sous Linux, vous pouvez utiliser PHP
+ exécutez Apache sous Linux, vous pouvez utiliser PHP
avec le MPM prefork sans craindre une diminution de
- performance trop importante par rapport à une option
- threadée.
+ performance trop importante par rapport à une option
+ threadée.
</p>
<section id="spinning-locks">
<title>Verrous tournants</title>
<p>Apache httpd maintient un verrou inter-processus du
- point de vue de son écoute du réseau. Dans les faits,
- cela signifie qu'un seul processus httpd enfant à la
- fois peut recevoir une requête. Ainsi, soient les autres
- processus en profitent alors pour traiter les requêtes
- qu'ils ont déjà reçues, soient ils attendent de pouvoir
- à leur tour récupérer le verrou et ainsi écouter le
- réseau pour recevoir une nouvelle requête. Ceci peut se
+ point de vue de son écoute du réseau. Dans les faits,
+ cela signifie qu'un seul processus httpd enfant à la
+ fois peut recevoir une requête. Ainsi, soient les autres
+ processus en profitent alors pour traiter les requêtes
+ qu'ils ont déjà reçues, soient ils attendent de pouvoir
+ à leur tour récupérer le verrou et ainsi écouter le
+ réseau pour recevoir une nouvelle requête. Ceci peut se
voir comme une porte tournante par laquelle un seul
- processus peut passer à la fois. Sur un serveur web
- fortement chargé où les requêtes arrivent constamment,
- la porte tourne rapidement et les requêtes sont
- acceptées à un rythme soutenu. Sur un serveur faiblement
- chargé en revanche, le processus qui "détient"
+ processus peut passer à la fois. Sur un serveur web
+ fortement chargé où les requêtes arrivent constamment,
+ la porte tourne rapidement et les requêtes sont
+ acceptées à un rythme soutenu. Sur un serveur faiblement
+ chargé en revanche, le processus qui "détient"
le verrou est suceptible de garder sa porte ouverte un
certain temps durant lequel tous les autres processus
seront inactifs, attendant de pouvoir s'approprier le
verrou. Dans une telle situation, le processus parent
- pourra décider d'arrêter quelques processus enfants en
+ pourra décider d'arrêter quelques processus enfants en
fonction de la valeur de la directive
<code>MaxSpareServers</code>.</p>
<section id="the-thundering-herd">
<title>L'assaut de la foule
</title>
- <p>La fonction de l'"accept mutex" (c'est le nom donné au
- verrou inter-processus) consiste à gérer la réception
- des requêtes de manière ordonnée. Si ce verrou est
+ <p>La fonction de l'"accept mutex" (c'est le nom donné au
+ verrou inter-processus) consiste à gérer la réception
+ des requêtes de manière ordonnée. Si ce verrou est
absent, le syndrome de l'"assaut de la foule" peut
- apparaître.
+ apparaître.
</p>
- <p>Imaginez une équipe de football américain en attente
+ <p>Imaginez une équipe de football américain en attente
devant la ligne de remise en jeu. Si les joueurs se
comportaient comme des processus Apache, ils se
- précipiteraient tous à la fois pour récupérer la balle au
+ précipiteraient tous à la fois pour récupérer la balle au
signal de la reprise. Un seul d'entre eux y
- parviendrait, et tous les autres n'auraient plus qu'à se
- regrouper à nouveau sur la ligne jusqu'à la reprise
- suivante. Dans cette métaphore, c'est le quaterback qui
- va jouer le rôle d'"accept mutex" en donnant la balle
- au joueur approprié.
- </p>
- <p>La transmission d'une telle quantité d'informations
- représente naturellement beaucoup de travail et, comme
+ parviendrait, et tous les autres n'auraient plus qu'à se
+ regrouper à nouveau sur la ligne jusqu'à la reprise
+ suivante. Dans cette métaphore, c'est le quaterback qui
+ va jouer le rôle d'"accept mutex" en donnant la balle
+ au joueur approprié.
+ </p>
+ <p>La transmission d'une telle quantité d'informations
+ représente naturellement beaucoup de travail et, comme
une personne intelligente, un serveur intelligent
- tentera d'éviter cette surcharge dans la mesure du
- possible, d'où l'idée de la porte tournante. Dans les
- dernières années, de nombreux systèmes d'exploitation,
- comme Linux et Solaris, ont développé du code pour
- éviter le syndrome de l'"assaut de la foule". Apache
- reconnaît ce code, et si vous n'effectuez qu'une seule
- écoute du réseau, autrement dit si vous n'utilisez que
+ tentera d'éviter cette surcharge dans la mesure du
+ possible, d'où l'idée de la porte tournante. Dans les
+ dernières années, de nombreux systèmes d'exploitation,
+ comme Linux et Solaris, ont développé du code pour
+ éviter le syndrome de l'"assaut de la foule". Apache
+ reconnaît ce code, et si vous n'effectuez qu'une seule
+ écoute du réseau, autrement dit si vous n'utilisez que
le serveur principal ou un seul serveur virtuel, Apache
n'utilisera pas d'"accept mutex" ; par contre, si vous
- effectuez plusieurs écoutes du réseau (par exemple si
- un serveur virtuel sert les requêtes SSL), Apache
- utilisera un "accept mutex" afin d'éviter les conflits
+ effectuez plusieurs écoutes du réseau (par exemple si
+ un serveur virtuel sert les requêtes SSL), Apache
+ utilisera un "accept mutex" afin d'éviter les conflits
internes.
</p>
<p>Vous pouvez manipuler l'"accept mutex" via la
- directive <code>AcceptMutex</code>. Cette dernière
+ directive <code>AcceptMutex</code>. Cette dernière
permet en particulier de fermer l'"accept mutex", mais
- aussi de sélectionner le mécanisme de verrouillage. Les
- mécanismes de verrouillage courants comprennent fcntl,
- les sémaphores System V et le verrouillage par threads.
- Tous ne sont pas supportés par toutes les plateformes,
- et leur disponibilité dépend aussi des options de
- compilation. Les différents mécanismes de verrouillage
- peuvent avoir des exigences particulières en matière de
- ressources système ; il est donc recommandé de les
- utiliser avec précautions.
- </p>
- <p>Il n'existe aucune raison particulière pour
- désactiver l'"accept mutex". Apache détermine
+ aussi de sélectionner le mécanisme de verrouillage. Les
+ mécanismes de verrouillage courants comprennent fcntl,
+ les sémaphores System V et le verrouillage par threads.
+ Tous ne sont pas supportés par toutes les plateformes,
+ et leur disponibilité dépend aussi des options de
+ compilation. Les différents mécanismes de verrouillage
+ peuvent avoir des exigences particulières en matière de
+ ressources système ; il est donc recommandé de les
+ utiliser avec précautions.
+ </p>
+ <p>Il n'existe aucune raison particulière pour
+ désactiver l'"accept mutex". Apache détermine
automatiquement s'il doit utiliser ou non mutex sur
- votre plateforme en fonction du nombre d'écoutes réseau
- de votre serveur, comme décrit précédemment.
+ votre plateforme en fonction du nombre d'écoutes réseau
+ de votre serveur, comme décrit précédemment.
</p>
</section>
</section>
<section id="tuning-the-operating-system">
- <title>Optimisation du système d'exploitation
+ <title>Optimisation du système d'exploitation
</title>
- <p>Souvent, les utilisateurs recherchent le paramètre magique qui va
- multiplier par quatre les performances de leur système. En
- fait, les systèmes de type Unix actuels sont déjà optimisés
- à l'origine, et il n'y a plus grand chose à faire pour
- améliorer leurs performances. L'administrateur peut
+ <p>Souvent, les utilisateurs recherchent le paramètre magique qui va
+ multiplier par quatre les performances de leur système. En
+ fait, les systèmes de type Unix actuels sont déjà optimisés
+ à l'origine, et il n'y a plus grand chose à faire pour
+ améliorer leurs performances. L'administrateur peut
cependant encore effectuer quelques modifications qui
permettront de peaufiner la configuration.
</p>
<section id="ram-and-swap-space">
<title>RAM et swap
</title>
- <p>Le leitmotiv en matière de mémoire est souvent "plus
+ <p>Le leitmotiv en matière de mémoire est souvent "plus
on en a, mieux c'est". En effet, comme nous avons dit
- plus haut, la mémoire inutilisée peut être
- avantageusement utilisée comme cache du système de
+ plus haut, la mémoire inutilisée peut être
+ avantageusement utilisée comme cache du système de
fichiers. Plus vous chargez de modules, plus les processus
Apache grossissent, et ceci d'autant plus si vous
- utilisez des modules qui génèrent des contenus
+ utilisez des modules qui génèrent des contenus
dynamiques comme PHP et mod_perl. Un gros fichier de
configuration - avec de nombreux serveurs virtuels - a
- aussi tendance à augmenter l'empreinte mémoire des
- processus. Une quantité de mémoire importante vous
- permettra d'exécuter Apache avec plus de processus
- enfants, et donc de traiter d'avantage de requêtes
- simultanément.
- </p>
- <p>Même si les différentes plateformes traitent leur
- mémoire virtuelle de différentes manières, il est
- déconseillé de configurer un espace disque de swap
- inférieur à la mémoire RAM. En effet, le système de mémoire
- virtuelle a été conçu de manière à prendre le relai
- lorsque la mémoire RAM fait défaut, et lorsque l'espace
- disque, et donc l'espace de swap vient à manquer, votre
- serveur risque de s'arrêter. Vous devrez alors
- redémarrer physiquement votre serveur, et votre
- hébergeur pourra vous facturer le service.
- </p>
- <p>Evidemment, ce genre problème survient au moment le
- plus défavorable : lorsque le monde vient découvrir votre
- site web et se présente avec insistance à votre porte.
- Si votre espace de swap est suffisant, même si la
- machine sera de plus en plus surchargée et deviendra
- très très lente car le système devra swapper les pages
- entre la mémoire et le disque, lorsque la charge diminuera à
- nouveau, le système reviendra dans son mode de
+ aussi tendance à augmenter l'empreinte mémoire des
+ processus. Une quantité de mémoire importante vous
+ permettra d'exécuter Apache avec plus de processus
+ enfants, et donc de traiter d'avantage de requêtes
+ simultanément.
+ </p>
+ <p>Même si les différentes plateformes traitent leur
+ mémoire virtuelle de différentes manières, il est
+ déconseillé de configurer un espace disque de swap
+ inférieur à la mémoire RAM. En effet, le système de mémoire
+ virtuelle a été conçu de manière à prendre le relai
+ lorsque la mémoire RAM fait défaut, et lorsque l'espace
+ disque, et donc l'espace de swap vient à manquer, votre
+ serveur risque de s'arrêter. Vous devrez alors
+ redémarrer physiquement votre serveur, et votre
+ hébergeur pourra vous facturer le service.
+ </p>
+ <p>Evidemment, ce genre problème survient au moment le
+ plus défavorable : lorsque le monde vient découvrir votre
+ site web et se présente avec insistance à votre porte.
+ Si votre espace de swap est suffisant, même si la
+ machine sera de plus en plus surchargée et deviendra
+ très très lente car le système devra swapper les pages
+ entre la mémoire et le disque, lorsque la charge diminuera à
+ nouveau, le système reviendra dans son mode de
fonctionnement normal. Rappelez-vous que vous disposez
- de la directive <code>MaxClients</code> pour garder le contrôle.
+ de la directive <code>MaxClients</code> pour garder le contrôle.
</p>
- <p>La plupart des systèmes de type Unix utilisent des
- partitions dédiées au swap. Au démarrage du système,
+ <p>La plupart des systèmes de type Unix utilisent des
+ partitions dédiées au swap. Au démarrage du système,
celui-ci enregistre toutes les partitions de swap du ou
des disques en fonction du type de la partition ou du
contenu du fichier <code>/etc/fstab</code> et les
- active de manière automatique. Lorsque vous ajoutez un
- disque, ou lorsque vous installez le système
+ active de manière automatique. Lorsque vous ajoutez un
+ disque, ou lorsque vous installez le système
d'exploitation, assurez-vous d'allouer suffisamment
- d'espace de swap afin de rester en adéquation avec une
- éventuelle augmentation de la mémoire RAM. La
- réallocation d'espace disque sur un système en
- production est en effet pénible et fastidieuse.
- </p>
- <p>Prévoyez un espace de swap de deux fois la taille de
- votre mémoire RAM, et même jusqu'à quatre fois lorsque
- les surcharges peuvent s'avérer fréquentes. Assurez-vous
- de réajuster ces valeurs lorsque vous augmentez la
- quantité de mémoire RAM de votre système. En secours,
+ d'espace de swap afin de rester en adéquation avec une
+ éventuelle augmentation de la mémoire RAM. La
+ réallocation d'espace disque sur un système en
+ production est en effet pénible et fastidieuse.
+ </p>
+ <p>Prévoyez un espace de swap de deux fois la taille de
+ votre mémoire RAM, et même jusqu'à quatre fois lorsque
+ les surcharges peuvent s'avérer fréquentes. Assurez-vous
+ de réajuster ces valeurs lorsque vous augmentez la
+ quantité de mémoire RAM de votre système. En secours,
vous pouvez aussi utilisez un fichier comme espace de
swap. Pour ce faire, vous trouverez les instructions
dans les pages de manuel de <code>mkswap</code> et
<section id="ulimit-files-and-processes">
<title>ulimit: fichiers et processus
</title>
- <p>Supposons que vous disposiez d'une machine possédant
- une énorme quantité de mémoire RAM et un processeur aux
- performances astronomiques ; vous pourrez alors exécuter
+ <p>Supposons que vous disposiez d'une machine possédant
+ une énorme quantité de mémoire RAM et un processeur aux
+ performances astronomiques ; vous pourrez alors exécuter
des centaines de processus Apache selon vos besoins,
- mais tout en restant en deçà des limites imposées par le
- noyau de votre système.
+ mais tout en restant en deçà des limites imposées par le
+ noyau de votre système.
</p>
- <p>Considérez maintenant une situation où plusieurs
- centaines de serveurs web sont en cours d'exécution ; si
- certains d'entre eux doivent à leur tour lancer des
- processus CGI, le nombre maximum de processus autorisé
+ <p>Considérez maintenant une situation où plusieurs
+ centaines de serveurs web sont en cours d'exécution ; si
+ certains d'entre eux doivent à leur tour lancer des
+ processus CGI, le nombre maximum de processus autorisé
par le noyau sera vite atteint.
</p>
<p>Dans ce cas, vous pouvez modifier cette limite avec
ulimit [-H|-S] -u [nouvelle valeur]
</example>
- <p>Cette modification doit être effectuée avant le
- démarrage du serveur, car la nouvelle valeur ne sera
+ <p>Cette modification doit être effectuée avant le
+ démarrage du serveur, car la nouvelle valeur ne sera
prise en compte que dans le shell courant et pour les
- programmes lancés depuis ce dernier. Dans les derniers
- noyaux Linux, la valeur par défaut a été fixée à 2048.
- Sous FreeBSD, ce nombre semble être limité à la valeur
- inhabituelle de 513. Dans le shell par défaut de ce
- système, <code>csh</code>, la commande équivalente est
- <code>limit</code> et possède une syntaxe analogue à
+ programmes lancés depuis ce dernier. Dans les derniers
+ noyaux Linux, la valeur par défaut a été fixée à 2048.
+ Sous FreeBSD, ce nombre semble être limité à la valeur
+ inhabituelle de 513. Dans le shell par défaut de ce
+ système, <code>csh</code>, la commande équivalente est
+ <code>limit</code> et possède une syntaxe analogue à
celle de la commande de style Bourne <code>ulimit</code> :
</p>
</example>
<p>En outre, le noyau peut limiter le nombre de fichiers
- ouverts par processus. Ce n'est généralement pas un
- problème pour les serveurs dont les processus sont lancés
- à l'avance, et où chacun de ceux-ci ne traite qu'une
- requête à la fois. Les processus des serveurs threadés,
- quant à eux, traitent plusieurs requêtes simultanément,
- et sont d'avantage susceptibles de dépasser la limite du
+ ouverts par processus. Ce n'est généralement pas un
+ problème pour les serveurs dont les processus sont lancés
+ à l'avance, et où chacun de ceux-ci ne traite qu'une
+ requête à la fois. Les processus des serveurs threadés,
+ quant à eux, traitent plusieurs requêtes simultanément,
+ et sont d'avantage susceptibles de dépasser la limite du
nombre de descripteurs de fichiers. Vous pouvez alors
augmenter cette valeur limite du nombre de fichiers
ouverts avec la commande :
<example>ulimit -n [newvalue]
</example>
- <p>Là encore, cette modification doit être effectuée
- avant le démarrage du serveur Apache.
+ <p>Là encore, cette modification doit être effectuée
+ avant le démarrage du serveur Apache.
</p>
</section>
<section id="setting-user-limits-on-system-startup">
- <title>Définition des limites en fonction de l'utilisateur ou du
- groupe au démarrage du système
+ <title>Définition des limites en fonction de l'utilisateur ou du
+ groupe au démarrage du système
</title>
- <p>Sous Linux, vous pouvez définir les paramètres de
- ulimit au démarrage en éditant le fichier
+ <p>Sous Linux, vous pouvez définir les paramètres de
+ ulimit au démarrage en éditant le fichier
<code>/etc/security/limits.conf</code>. Ce fichier vous
- permet de définir des limites "soft" et "hard"
+ permet de définir des limites "soft" et "hard"
en fonction de l'utilisateur ou du groupe ;
vous y trouverez aussi des commentaires explicatifs des
- différentes options. Pour que ce fichier soit pris en
+ différentes options. Pour que ce fichier soit pris en
compte, le fichier <code>/etc/pam.d/login</code> doit
contenir la ligne :
</p>
<example>session required /lib/security/pam_limits.so
</example>
- <p>Chaque item peut posséder une valeur "soft" et
- "hard" : la première est la valeur
- par défaut, et la seconde la valeur maximale de cet
+ <p>Chaque item peut posséder une valeur "soft" et
+ "hard" : la première est la valeur
+ par défaut, et la seconde la valeur maximale de cet
item.
</p>
<p>Dans le fichier <code>/etc/login.conf</code> de
- FreeBSD, ces valeurs peuvent être limitées ou étendues à
- tout le système de manière analogue au fichier
+ FreeBSD, ces valeurs peuvent être limitées ou étendues à
+ tout le système de manière analogue au fichier
<code>limits.conf</code>. Les limites "soft" sont
- spécifiées via le paramètre <code>-cur</code>, et les
- limites "hard" via le paramètre <code>-max</code>.
+ spécifiées via le paramètre <code>-cur</code>, et les
+ limites "hard" via le paramètre <code>-max</code>.
</p>
- <p>Solaris possède un mécanisme similaire pour manipuler
- les valeurs limites au démarrage du système : dans le
- fichier <code>/etc/system</code>, vous pouvez définir au
- démarrage des paramètres du noyau valables pour
- l'ensemble du système. Ce sont les mêmes paramètres que
- ceux définis à l'exécution par le débogueur de noyau
- <code>mdb</code>. Les commandes équivalentes à ulimit -u
- pour définir les limites hard et soft seront du style :
+ <p>Solaris possède un mécanisme similaire pour manipuler
+ les valeurs limites au démarrage du système : dans le
+ fichier <code>/etc/system</code>, vous pouvez définir au
+ démarrage des paramètres du noyau valables pour
+ l'ensemble du système. Ce sont les mêmes paramètres que
+ ceux définis à l'exécution par le débogueur de noyau
+ <code>mdb</code>. Les commandes équivalentes à ulimit -u
+ pour définir les limites hard et soft seront du style :
</p>
<example>
</example>
<p>Solaris calcule le nombre maximal de processus
- autorisé par utilisateur (<code>maxuprc</code>) en
- fonction de la mémoire système disponible
+ autorisé par utilisateur (<code>maxuprc</code>) en
+ fonction de la mémoire système disponible
(<code>maxusers</code>). Vous pouvez obtenir ces valeurs
avec la commande :
</p>
<example>sysdef -i | grep maximum
</example>
- <p>Il est cependant déconseillé de les modifier.
+ <p>Il est cependant déconseillé de les modifier.
</p>
</section>
<section id="turn-off-unused-services-and-modules">
- <title>Désactiver les services et modules non utilisés
+ <title>Désactiver les services et modules non utilisés
</title>
<p>Dans la plupart des distributions Unix et Linux, de
- nombreux services sont activés par défaut, et vous n'
- avez probablement besoin que d'une minorité d'entre eux.
+ nombreux services sont activés par défaut, et vous n'
+ avez probablement besoin que d'une minorité d'entre eux.
Par exemple, votre serveur web n'a pas besoin de
- sendmail, de fournir le service NFS, etc... Désactivez
+ sendmail, de fournir le service NFS, etc... Désactivez
les tout simplement.
</p>
<p>Pour ce faire, sous RedHat Linux, vous
disposez de l'utilitaire chkconfig en ligne de commande.
Sous Solaris, les commandes <code>svcs</code> et
<code>svcadm</code> vous permettent respectivement
- de lister les services activés et de désactiver ceux
+ de lister les services activés et de désactiver ceux
dont vous n'avez pas besoin.
</p>
- <p>Vous devez aussi prêter attention aux modules Apache
- chargés par défaut. La plupart des distributions binaires
- d'Apache httpd et des versions préinstallées fournies
+ <p>Vous devez aussi prêter attention aux modules Apache
+ chargés par défaut. La plupart des distributions binaires
+ d'Apache httpd et des versions préinstallées fournies
avec les distributions de Linux chargent les modules
Apache via la directive
<directive>LoadModule</directive>.
</p>
- <p>Les modules inutilisés peuvent être désactivés : si
- vous n'avez pas besoin de leurs fonctionnalités et des
- directives de configuration qu'ils implémentent,
- désactivez-les en commentant les lignes
+ <p>Les modules inutilisés peuvent être désactivés : si
+ vous n'avez pas besoin de leurs fonctionnalités et des
+ directives de configuration qu'ils implémentent,
+ désactivez-les en commentant les lignes
<directive>LoadModule</directive> correspondantes. Vous
- devez cependant lire la documentation relative à ces
- modules avant de les désactiver, et garder à l'esprit que
- la désactivation d'un module très peu gourmand en
- ressources n'est pas absolument nécessaire.
+ devez cependant lire la documentation relative à ces
+ modules avant de les désactiver, et garder à l'esprit que
+ la désactivation d'un module très peu gourmand en
+ ressources n'est pas absolument nécessaire.
</p>
<section id="caching-content">
<title>Mise en cache des contenus
</title>
- <p>Les requêtes impliquant des contenus dynamiques nécessitent
- en général d'avantage de ressources que les
- requêtes pour des contenus statiques. Les contenus statiques
+ <p>Les requêtes impliquant des contenus dynamiques nécessitent
+ en général d'avantage de ressources que les
+ requêtes pour des contenus statiques. Les contenus statiques
consistent en simples pages issues de documents ou images
- sur disque, et sont servis très rapidement. En outre, de
- nombreux systèmes d'exploitation mettent automatiquement en
- cache en mémoire les contenus des fichiers fréquemment accédés.
+ sur disque, et sont servis très rapidement. En outre, de
+ nombreux systèmes d'exploitation mettent automatiquement en
+ cache en mémoire les contenus des fichiers fréquemment accédés.
</p>
- <p>Comme indiqué précédemment, le traitement des requêtes dynamiques peut
- nécessiter beaucoup plus de ressources. L'exécution de scripts
- CGI, le transfert de requêtes à un serveur d'applications
- externe, ou les accès à une base de données peuvent impliquer
+ <p>Comme indiqué précédemment, le traitement des requêtes dynamiques peut
+ nécessiter beaucoup plus de ressources. L'exécution de scripts
+ CGI, le transfert de requêtes à un serveur d'applications
+ externe, ou les accès à une base de données peuvent impliquer
des temps d'attente et charges de travail significatifs pour un
- serveur web fortement sollicité. Dans de nombreuses
- circonstances, vous pourrez alors améliorer les performances en
- transformant les requêtes dynamiques courantes en requêtes
- statiques. Pour ce faire, deux approches seront discutées dans
+ serveur web fortement sollicité. Dans de nombreuses
+ circonstances, vous pourrez alors améliorer les performances en
+ transformant les requêtes dynamiques courantes en requêtes
+ statiques. Pour ce faire, deux approches seront discutées dans
la suite de cette section.
</p>
<title>Transformation des pages courantes en contenus
statiques
</title>
- <p>En générant à l'avance les réponses pour les requêtes les
- plus courantes de votre application, vous pouvez améliorer
- de manière significative les performances de votre serveur
- sans abandonner la flexibilité des contenus générés
+ <p>En générant à l'avance les réponses pour les requêtes les
+ plus courantes de votre application, vous pouvez améliorer
+ de manière significative les performances de votre serveur
+ sans abandonner la flexibilité des contenus générés
dynamiquement. Par exemple, si votre application est un
- service de livraison de fleurs, vous aurez tout intérêt à
- générer à l'avance les pages de votre catalogue concernant
- les roses rouges dans les semaines précédant le jour de la
+ service de livraison de fleurs, vous aurez tout intérêt à
+ générer à l'avance les pages de votre catalogue concernant
+ les roses rouges dans les semaines précédant le jour de la
Saint Valentin. Lorsqu'un utilisateur cherchera des roses
- rouges, il téléchargera alors les pages générées à
+ rouges, il téléchargera alors les pages générées à
l'avance. Par contre, les recherches de roses jaunes seront
- quant à elles traitées directement via une requête vers la
- base de données. Pour effectuer ces aiguillages de requêtes,
- vous disposez d'un outil particulièrement approprié fourni
+ quant à elles traitées directement via une requête vers la
+ base de données. Pour effectuer ces aiguillages de requêtes,
+ vous disposez d'un outil particulièrement approprié fourni
avec Apache : le module mod_rewrite.
</p>
One showing how to make Wordpress or Drupal suck less. -->
<p>Blosxom est un programme CGI de journalisation web
- léger. Il est écrit en Perl et utilise des fichiers
- texte pour ses entrées. Outre sa qualité de programme
- CGI, Blosxom peut être exécuté en ligne de commande pour
- générer à l'avance des pages de blog. Lorsque votre blog
- commence à être lu par un grand nombre de personnes, la
- génération à l'avance de pages en HTML satique peut
- améliorer de manière significative les performances de
+ léger. Il est écrit en Perl et utilise des fichiers
+ texte pour ses entrées. Outre sa qualité de programme
+ CGI, Blosxom peut être exécuté en ligne de commande pour
+ générer à l'avance des pages de blog. Lorsque votre blog
+ commence à être lu par un grand nombre de personnes, la
+ génération à l'avance de pages en HTML satique peut
+ améliorer de manière significative les performances de
votre serveur.
</p>
- <p>Pour générer des pages statiques avec blosxom, éditez
- le script CGI selon la documentation. Définissez la
- variable $static dir à la valeur de
+ <p>Pour générer des pages statiques avec blosxom, éditez
+ le script CGI selon la documentation. Définissez la
+ variable $static dir à la valeur de
<directive>DocumentRoot</directive> de votre serveur
- web, et exécutez le script en ligne de commande comme
+ web, et exécutez le script en ligne de commande comme
suit :
</p>
<example>$ perl blosxom.cgi -password='whateveryourpassword'
</example>
- <p>Vous pouvez exécuter ce script périodiquement via
- cron, à chaque fois que vous ajoutez un nouveau contenu. Pour
+ <p>Vous pouvez exécuter ce script périodiquement via
+ cron, à chaque fois que vous ajoutez un nouveau contenu. Pour
faire en sorte qu'Apache substitue les pages
statiques au contenu dynamique, nous
utiliserons mod_rewrite. Ce module est fourni avec le
- code source d'Apache, mais n'est pas compilé par défaut.
+ code source d'Apache, mais n'est pas compilé par défaut.
Pour le compiler avec la distribution d'Apache, vous
pouvez utiliser l'option de la commande configure
<code>--enable-rewrite[=shared]</code>. De nombreuses
distributions binaires d'Apache sont fournies avec
<module>mod_rewrite</module> inclus. Dans l'exemple
suivant, un serveur virtuel Apache utilise les pages de
- blog générées à l'avance :
+ blog générées à l'avance :
</p>
<highlight language="config">
<p>
Si les directives <directive>RewriteCond</directive>
- indiquent que la ressource demandée n'existe ni en tant que
- fichier, ni en tant que répertoire, son
- chemin sera redirigé par la directive
+ indiquent que la ressource demandée n'existe ni en tant que
+ fichier, ni en tant que répertoire, son
+ chemin sera redirigé par la directive
<directive>RewriteRule</directive> vers le programme
- CGI Blosxom qui va générer la réponse. Blosxom
- utilise Path Info pour spécifier les entrées de blog
+ CGI Blosxom qui va générer la réponse. Blosxom
+ utilise Path Info pour spécifier les entrées de blog
en tant que pages d'index, et si un chemin dans
- Blosxom existe en tant que fichier statique dans le système de
- fichiers, c'est ce dernier qui sera par conséquent privilégié.
- Toute requête dont la réponse n'a pas été générée à
- l'avance sera traitée par le programme CGI. Cela
- signifie que les entrées individuelles comme les
+ Blosxom existe en tant que fichier statique dans le système de
+ fichiers, c'est ce dernier qui sera par conséquent privilégié.
+ Toute requête dont la réponse n'a pas été générée à
+ l'avance sera traitée par le programme CGI. Cela
+ signifie que les entrées individuelles comme les
commentaires seront toujours servies par le
programme CGI, et seront donc toujours visibles.
Cette configuration permet aussi de ne pas faire
- apparaître le programme CGI Blosxom dans l'URL de la barre
- d'adresse. Enfin, mod_rewrite est un module extrêmement
+ apparaître le programme CGI Blosxom dans l'URL de la barre
+ d'adresse. Enfin, mod_rewrite est un module extrêmement
souple et puissant ; prenez le temps de bien
- l'étudier afin de parvenir à la configuration qui
- correspondra le mieux à votre situation.
+ l'étudier afin de parvenir à la configuration qui
+ correspondra le mieux à votre situation.
</p>
<section id="caching-content-with-mod_cache">
<title>Mise en cache du contenu avec mod_cache
</title>
- <p>Le module mod_cache implémente une mise en cache
- intelligente des réponses HTTP : il tient compte des délais
- de péremption et des contraintes en matière de contenu
- inhérentes à la spécification HTTP. Le module mod_cache met
- en cache les URL des contenus des réponses. Si un contenu envoyé au
- client peut être mis en cache, il est sauvegardé sur disque.
- Les requêtes ultérieures pour cette URL seront alors servies
+ <p>Le module mod_cache implémente une mise en cache
+ intelligente des réponses HTTP : il tient compte des délais
+ de péremption et des contraintes en matière de contenu
+ inhérentes à la spécification HTTP. Le module mod_cache met
+ en cache les URL des contenus des réponses. Si un contenu envoyé au
+ client peut être mis en cache, il est sauvegardé sur disque.
+ Les requêtes ultérieures pour cette URL seront alors servies
directement depuis le cache. Le module fournisseur pour
- mod_cache, mod_disk_cache, détermine la manière dont les
- contenus sont stockés sur disque. La plupart des systèmes de
- serveur possèdent plus d'espace disque que de mémoire, et il
- est bon de garder à l'esprit que certains noyaux système mettent en
- cache de manière transparente en mémoire les contenus sur
- disque fréquemment accédés ; il n'est donc pas très utile de
- répéter cette opération au niveau du serveur.
+ mod_cache, mod_disk_cache, détermine la manière dont les
+ contenus sont stockés sur disque. La plupart des systèmes de
+ serveur possèdent plus d'espace disque que de mémoire, et il
+ est bon de garder à l'esprit que certains noyaux système mettent en
+ cache de manière transparente en mémoire les contenus sur
+ disque fréquemment accédés ; il n'est donc pas très utile de
+ répéter cette opération au niveau du serveur.
</p>
<p>Pour mettre en oeuvre une mise en cache de contenu
- efficace et éviter de présenter à l'utilisateur un contenu
- invalide ou périmé, l'application qui génère le contenu à
- jour doit envoyer les en-têtes de réponse corrects. En
- effet, en l'absence d'en-têtes comme <code>Etag:</code>,
+ efficace et éviter de présenter à l'utilisateur un contenu
+ invalide ou périmé, l'application qui génère le contenu à
+ jour doit envoyer les en-têtes de réponse corrects. En
+ effet, en l'absence d'en-têtes comme <code>Etag:</code>,
<code>Last-Modified:</code> ou <code>Expires:</code>,
- <module>mod_cache</module> ne sera pas en mesure de décider
- de manière appropriée
+ <module>mod_cache</module> ne sera pas en mesure de décider
+ de manière appropriée
s'il doit mettre le contenu en cache, s'il doit le servir
directement depuis ce dernier, ou s'il doit tout simplement
ne rien faire. Lorsque vous testerez la mise en cache, vous
- devrez peut-être modifier votre application ou, en cas
- d'impossibilité, désactiver de manière sélective la mise en
- cache des URLs qui posent problème. Les modules mod_cache ne
- sont pas compilés par défaut ; pour ce faire, vous devez
+ devrez peut-être modifier votre application ou, en cas
+ d'impossibilité, désactiver de manière sélective la mise en
+ cache des URLs qui posent problème. Les modules mod_cache ne
+ sont pas compilés par défaut ; pour ce faire, vous devez
utiliser l'option <code>--enable-cache[=shared]</code> du
script configure. Si vous utilisez une distribution binaire
d'Apache httpd, ou si elle fait partie de votre portage ou
- de votre sélection de paquets, <module>mod_cache</module>
- sera probablement déjà inclus.
+ de votre sélection de paquets, <module>mod_cache</module>
+ sera probablement déjà inclus.
</p>
a better example here too.-->
<p>
Le Wiki de l'Apache Software Foundation est servi
- par MoinMoin. MoinMoin est écrit en Python et
- s'exécute en tant que programme CGI. A l'heure
- actuelle, toute tentative pour l'exécuter via
- mod_python s'est soldée par un échec. Le programme
+ par MoinMoin. MoinMoin est écrit en Python et
+ s'exécute en tant que programme CGI. A l'heure
+ actuelle, toute tentative pour l'exécuter via
+ mod_python s'est soldée par un échec. Le programme
CGI induit une charge inacceptable sur le serveur,
- particulièrement lorsque le Wiki est indexé par des
- moteurs de recherche comme Google. Pour alléger la
- charge de la machine, l'équipe d'infrastructure
- d'Apache s'est tournée vers mod_cache. Il s'est
- avéré que <a href="/httpd/MoinMoin">MoinMoin</a>
- nécessitait un petit patch pour adopter un
- comportement approprié en aval du serveur de mise
- en cache : certaines requêtes ne pouvaient jamais
- être mises en cache, et les modules Python
- concernés ont été mis à jour pour pouvoir envoyer
- les en-têtes de réponse HTTP corrects. Après cette
+ particulièrement lorsque le Wiki est indexé par des
+ moteurs de recherche comme Google. Pour alléger la
+ charge de la machine, l'équipe d'infrastructure
+ d'Apache s'est tournée vers mod_cache. Il s'est
+ avéré que <a href="/httpd/MoinMoin">MoinMoin</a>
+ nécessitait un petit patch pour adopter un
+ comportement approprié en aval du serveur de mise
+ en cache : certaines requêtes ne pouvaient jamais
+ être mises en cache, et les modules Python
+ concernés ont été mis à jour pour pouvoir envoyer
+ les en-têtes de réponse HTTP corrects. Après cette
modification, la mise en cache en amont du Wiki a
- été activée via l'insertion des lignes suivantes
+ été activée via l'insertion des lignes suivantes
dans le fichier de configuration
<code>httpd.conf</code> :
</p>
<highlight language="config">
CacheRoot /raid1/cacheroot
CacheEnable disk /
-# Une page modifiée il y a 100 minutes expirera dans 10 minutes
+# Une page modifiée il y a 100 minutes expirera dans 10 minutes
CacheLastModifiedFactor .1
-# Dans tous les cas, vérifier la validité des pages après 6 heures
+# Dans tous les cas, vérifier la validité des pages après 6 heures
CacheMaxExpire 21600
</highlight>
cache un contenu plus vieux que 6 heures (voir la
directive <directive
module="mod_cache">CacheMaxExpire</directive>). Si
- l'en-tête <code>Expires:</code> est absent de la
- réponse, <module>mod_cache</module> va calculer une date
- d'expiration en fonction du contenu de l'en-tête
+ l'en-tête <code>Expires:</code> est absent de la
+ réponse, <module>mod_cache</module> va calculer une date
+ d'expiration en fonction du contenu de l'en-tête
<code>Last-Modified:</code>. Le principe de ce calcul
qui utilise la directive <directive
module="mod_cache">CacheLastModifiedFactor</directive>
- se base sur l'hypothèse que si une page a été modifiée
- récemment, il y a de fortes chances pour qu'elle le soit
- à nouveau dans un futur proche et devra donc être remise
+ se base sur l'hypothèse que si une page a été modifiée
+ récemment, il y a de fortes chances pour qu'elle le soit
+ à nouveau dans un futur proche et devra donc être remise
en cache.
</p>
<p>
- Notez qu'il peut s'avérer payant de
- <em>désactiver</em> l'en-tête <code>ETag:</code> :
- pour les fichiers inférieurs à 1 ko, le serveur
- doit calculer la somme de vérification checksum (en
- général MD5) et envoyer une réponse <code>304 Not
+ Notez qu'il peut s'avérer payant de
+ <em>désactiver</em> l'en-tête <code>ETag:</code> :
+ pour les fichiers inférieurs à 1 ko, le serveur
+ doit calculer la somme de vérification checksum (en
+ général MD5) et envoyer une réponse <code>304 Not
Modified</code>, ce qui utilise des ressources CPU
- et réseau pour le transfert (1 paquet TCP). Pour les
- ressources supérieures à 1 ko, les ressources CPU
- consommées peuvent devenir importantes car l'en-tête
- est calculé à chaque requête. Malheureusement, il
+ et réseau pour le transfert (1 paquet TCP). Pour les
+ ressources supérieures à 1 ko, les ressources CPU
+ consommées peuvent devenir importantes car l'en-tête
+ est calculé à chaque requête. Malheureusement, il
n'existe actuellement aucun moyen pour mettre en
- cache ces en-têtes.
+ cache ces en-têtes.
</p>
<highlight language="config">
<FilesMatch "\.(jpe?g|png|gif|js|css|x?html|xml)">
</highlight>
<p>
- Dans l'exemple précédent: la génération d'un en-tête
- <code>ETag:</code> sera désactivée pour la plupart
- des ressources statiques. Le serveur ne génère pas
- ces en-têtes pour les ressources dynamiques.
+ Dans l'exemple précédent: la génération d'un en-tête
+ <code>ETag:</code> sera désactivée pour la plupart
+ des ressources statiques. Le serveur ne génère pas
+ ces en-têtes pour les ressources dynamiques.
</p>
<section id="further-considerations">
<title>Pour aller plus loin
</title>
- <p>Armés du savoir-faire pour personnaliser un système afin
- qu'il affiche les performances désirées, nous découvrirons vite
- qu'<em>1</em> sytème à lui seul peut constituer un goulot
- d'étranglement. A ce sujet, la page du Wiki <a
+ <p>Armés du savoir-faire pour personnaliser un système afin
+ qu'il affiche les performances désirées, nous découvrirons vite
+ qu'<em>1</em> sytème à lui seul peut constituer un goulot
+ d'étranglement. A ce sujet, la page du Wiki <a
href="https://cwiki.apache.org/confluence/display/httpd/PerformanceScalingOut">PerformanceScalingOut</a>
- décrit comment adapter un système à mesure qu'il prend de
- l'ampleur, ou comment personnaliser plusieurs systèmes dans leur
+ décrit comment adapter un système à mesure qu'il prend de
+ l'ampleur, ou comment personnaliser plusieurs systèmes dans leur
ensemble.
</p>
</section>
divisée en champs ne contenant pas d'espace séparés par des espaces.
Si un item de la chaîne de format ne génère aucune sortie,
l'ensemble du champ est omis. Par exemple, si l'adresse distante
- <code>%a</code> du format <code>[%t] [%l] [%a] %M </code> n'est
+ <code>%a</code> du format <code>[%t] [%l] [%a] %M </code> n'est
pas disponible, les crochets qui l'entourent ne seront eux-mêmes pas
enregistrés. Il est possible d'échapper les espaces par un anti-slash
afin qu'ils ne soient pas considérés comme séparateurs de champs.
- La combinaison '% ' (pourcentage espace) est un délimiteur de
+ La combinaison '% ' (pourcentage espace) est un délimiteur de
champ de taille nulle qui ne génère aucune sortie.</p>
<p>Ce comportement peut être changé en ajoutant des modificateurs à
<table border="1" style="zebra">
<columnspec><column width=".2"/><column width=".8"/></columnspec>
- <tr><th>Chaîne de format</th> <th>Description</th></tr>
+ <tr><th>Chaîne de format</th> <th>Description</th></tr>
<tr><td><code>%%</code></td>
<td>Le signe pourcentage</td></tr>
avec la définition de la directive <directive module="core"
>UseCanonicalName</directive>.</td></tr>
- <tr><td><code>\ </code> (anti-slash espace)</td>
+ <tr><td><code>\ </code> (anti-slash espace)</td>
<td>Espace non délimiteur</td></tr>
- <tr><td><code>% </code> (pourcentage espace)</td>
+ <tr><td><code>% </code> (pourcentage espace)</td>
<td>Délimiteur de champ (aucune sortie)</td></tr>
</table>
<highlight language="config">
# Exemple (format par défaut pour les MPMs threadés)
-ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
+ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
</highlight>
<p>Cet exemple renverrait un message d'erreur du style :</p>
<highlight language="config">
# Exemple (similaire au format 2.2.x)
-ErrorLogFormat "[%t] [%l] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
+ErrorLogFormat "[%t] [%l] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
</highlight>
<highlight language="config">
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
-<compatibility>La valeur par défaut était "INode MTime Size"
+<compatibility>La valeur par défaut était "INode MTime Size"
dans les versions 2.3.14 et antérieures.</compatibility>
<usage>
héritées.</p>
<p>Si la configuration d'un répertoire contient
- <code>FileETag INode MTime Size</code>, et si un de
- ses sous-répertoires contient <code>FileETag -INode</code>, la
+ <code>FileETag INode MTime Size</code>, et si un de
+ ses sous-répertoires contient <code>FileETag -INode</code>, la
configuration de ce sous-répertoire (qui sera propagée vers tout
sous-répertoire qui ne la supplante pas), sera équivalente à
- <code>FileETag MTime Size</code>.</p>
+ <code>FileETag MTime Size</code>.</p>
<note><title>Inclusions côté serveur</title> Aucun champ ETag n'est généré
pour les réponses interprétées par <module>mod_include</module>, car
l'entité de la réponse peut changer sans modification de l'INode, du MTime,
requête est de 64 caractères ou plus.</p>
<p>Si Apache httpd traite la requête
- <code>GET /disque1/stockage/apache/htdocs/images/rep-images1/nourriture/pommes.jpg HTTP/1.1</code>
+ <code>GET /disque1/stockage/apache/htdocs/images/rep-images1/nourriture/pommes.jpg HTTP/1.1</code>
, l'affichage de la requête par <module>mod_status</module> se présentera
comme suit :
</p>
<table border="1">
<tr>
<th>Off (défaut)</th>
- <td>GET /disque1/stockage/apache/htdocs/images/rep-images1/nourritu</td>
+ <td>GET /disque1/stockage/apache/htdocs/images/rep-images1/nourritu</td>
</tr>
<tr>
<th>On</th>
- <td>apache/htdocs/images/rep-images1/nourriture/pommes.jpg HTTP/1.1</td>
+ <td>apache/htdocs/images/rep-images1/nourriture/pommes.jpg HTTP/1.1</td>
</tr>
</table>
<summary>
<p>
Toutes les directives Apache disponibles dans la distribution standard
- d'Apache sont référencées ici. Elles sont décrites en utilisant un
- format normalisé, et <a href="directive-dict.html"
- rel="Glossary">un dictionnaire</a> des termes utilisés dans leurs
+ d'Apache sont référencées ici. Elles sont décrites en utilisant un
+ format normalisé, et <a href="directive-dict.html"
+ rel="Glossary">un dictionnaire</a> des termes utilisés dans leurs
descriptions est disponible.
</p>
<p>
Un <a href="quickreference.html">
- Document de référence rapide des directives</a>
- est également disponible. Il fournit des détails à propos de chaque directive
- sous une forme abrégée.
+ Document de référence rapide des directives</a>
+ est également disponible. Il fournit des détails à propos de chaque directive
+ sous une forme abrégée.
</p>
</summary>
</directiveindex>
<summary>
<p>
Ci-dessous se trouve la liste de tous les modules qui font partie de
- la distribution du serveur HTTP Apache. Voir aussi la liste alphabétique complète
+ la distribution du serveur HTTP Apache. Voir aussi la liste alphabétique complète
de <a href="directives.html">toutes les directives du serveur HTTP Apache</a>.
</p>
</summary>
<seealso><a href="../mpm.html">Modules multi-processus (MPMs)</a>
</seealso>
- <seealso><a href="quickreference.html">Document de référence rapide des directives</a>
+ <seealso><a href="quickreference.html">Document de référence rapide des directives</a>
</seealso>
</moduleindex>
<name>mod_actions</name>
-<description>Exécution des scripts CGI en fonction du
-type de média ou de la méthode de requête.</description>
+<description>Exécution des scripts CGI en fonction du
+type de média ou de la méthode de requête.</description>
<status>Base</status>
<sourcefile>mod_actions.c</sourcefile>
<identifier>actions_module</identifier>
<summary>
- <p>Ce module possède deux directives. La directive <directive
+ <p>Ce module possède deux directives. La directive <directive
module="mod_actions">Action</directive> vous permet de lancer
- l'exécution de scripts CGI chaque fois qu'un fichier possédant un
+ l'exécution de scripts CGI chaque fois qu'un fichier possédant un
certain <glossary ref="mime-type">type de contenu MIME</glossary>
- fait l'objet d'une requête. La directive <directive
+ fait l'objet d'une requête. La directive <directive
module="mod_actions">Script</directive> vous permet de lancer
- l'exécution de scripts CGI chaque fois que la requête utilise une
- méthode particulière. Ceci facilite grandement l'exécution de
+ l'exécution de scripts CGI chaque fois que la requête utilise une
+ méthode particulière. Ceci facilite grandement l'exécution de
scripts qui traitent des fichiers.</p> </summary>
<seealso><module>mod_cgi</module></seealso>
<usage>
<p>Cette directive ajoute une action qui va activer <var>script
- cgi</var> lorsque <var>type d'action</var> est déclenché par la
- requête. <var>script cgi</var> est un chemin URL vers une ressource
- qui a été désignée comme script CGI à l'aide des directives
+ cgi</var> lorsque <var>type d'action</var> est déclenché par la
+ requête. <var>script cgi</var> est un chemin URL vers une ressource
+ qui a été désignée comme script CGI à l'aide des directives
<directive module="mod_alias">ScriptAlias</directive> ou <directive
module="mod_mime">AddHandler</directive>. <var>type d'action</var>
- peut être soit un <a href="../handler.html">gestionnaire</a>, soit
+ peut être soit un <a href="../handler.html">gestionnaire</a>, soit
un <glossary ref="mime-type">type de contenu MIME</glossary>. L'URL
- et le chemin du document correspondant sont envoyés en utilisant
+ et le chemin du document correspondant sont envoyés en utilisant
les variables d'environnement CGI standards <code>PATH_INFO</code>
- et <code>PATH_TRANSLATED</code>. Le gestionnaire utilisé pour cette
- requête particulière est transmis à l'aide de la variable
+ et <code>PATH_TRANSLATED</code>. Le gestionnaire utilisé pour cette
+ requête particulière est transmis à l'aide de la variable
<code>REDIRECT_HANDLER</code>.</p>
<example><title>Exemple : type MIME</title>
</highlight>
</example>
- <p>Dans cet exemple, les requêtes pour des fichiers possédant
- le type de contenu MIME <code>image/gif</code> seront traitées par
+ <p>Dans cet exemple, les requêtes pour des fichiers possédant
+ le type de contenu MIME <code>image/gif</code> seront traitées par
le script CGI <code>/cgi-bin/images.cgi</code>.</p>
<example>
Action my-file-type /cgi-bin/program.cgi
</highlight>
</example>
- <p>Dans cet exemple, les requêtes pour des fichiers possédant
- l'extension <code>.xyz</code> seront traitées par
+ <p>Dans cet exemple, les requêtes pour des fichiers possédant
+ l'extension <code>.xyz</code> seront traitées par
le script CGI <code>/cgi-bin/programme.cgi</code>.</p>
<p>Le modificateur optionnel <code>virtual</code> permet de
- désactiver la vérification de l'existence du fichier demandé. Ceci
- peut s'avérer utile, par exemple, si vous voulez utiliser la
+ désactiver la vérification de l'existence du fichier demandé. Ceci
+ peut s'avérer utile, par exemple, si vous voulez utiliser la
directive <directive>Action</directive> pour des localisations
virtuelles.</p>
<directivesynopsis>
<name>Script</name>
-<description>Active un script CGI dans le cas d'une méthode de requête
-particulière.</description>
-<syntax>Script <var>méthode</var> <var>script cgi</var></syntax>
+<description>Active un script CGI dans le cas d'une méthode de requête
+particulière.</description>
+<syntax>Script <var>méthode</var> <var>script cgi</var></syntax>
<contextlist>
<context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<usage>
<p>Cette directive ajoute une action qui va activer <var>script
- cgi</var> lorsqu'un fichier est demandé en utilisant la méthode
- <var>méthode</var>. <var>script cgi</var> est le chemin URL d'une
- ressource qui a été désignée comme script CGI en utilisant les
+ cgi</var> lorsqu'un fichier est demandé en utilisant la méthode
+ <var>méthode</var>. <var>script cgi</var> est le chemin URL d'une
+ ressource qui a été désignée comme script CGI en utilisant les
directives <directive
module="mod_alias">ScriptAlias</directive> ou <directive
module="mod_mime">AddHandler</directive>. L'URL et le chemin du
- document demandé sont envoyés en utilisant les variables
+ document demandé sont envoyés en utilisant les variables
d'environnement CGI standards <code>PATH_INFO</code> et
<code>PATH_TRANSLATED</code>.</p>
<note>
- Tous les noms de méthode peuvent être utilisés. <strong>Les noms
- de méthode sont sensibles à la casse</strong>, si bien que
+ Tous les noms de méthode peuvent être utilisés. <strong>Les noms
+ de méthode sont sensibles à la casse</strong>, si bien que
<code>Script PUT</code> et <code>Script put</code> ont des effets
- totalement différents.
+ totalement différents.
</note>
- <p>Notez que la commande <directive>Script</directive> ne définit
- que des actions par défaut. Si un script CGI est appelé, ou toute
- autre ressource capable de gérer la méthode de la requête en
- interne, il agira en conséquence. Notez aussi que
- <directive>Script</directive> avec une méthode <code>GET</code> ne
- sera appelé que si la requête possède des arguments (par exemple
- foo.html?hi). Dans le cas contraire, la requête sera traitée
+ <p>Notez que la commande <directive>Script</directive> ne définit
+ que des actions par défaut. Si un script CGI est appelé, ou toute
+ autre ressource capable de gérer la méthode de la requête en
+ interne, il agira en conséquence. Notez aussi que
+ <directive>Script</directive> avec une méthode <code>GET</code> ne
+ sera appelé que si la requête possède des arguments (par exemple
+ foo.html?hi). Dans le cas contraire, la requête sera traitée
normalement.</p>
<highlight language="config">
<modulesynopsis metafile="mod_allowhandlers.xml.meta">
<name>mod_allowhandlers</name>
-<description>Facilite la définition de la liste des gestionnaires HTTP
-qui peuvent être utilisés pour le serveur</description>
+<description>Facilite la définition de la liste des gestionnaires HTTP
+qui peuvent être utilisés pour le serveur</description>
<status>Experimental</status>
<sourcefile>mod_allowhandlers.c</sourcefile>
<identifier>allowhandlers_module</identifier>
<summary>
-<p>Ce module facilite la définition de la liste des gestionnaires HTTP
-qui peuvent être utilisés pour une requête. Voici un exemple de ligne de
+<p>Ce module facilite la définition de la liste des gestionnaires HTTP
+qui peuvent être utilisés pour une requête. Voici un exemple de ligne de
configuration :</p>
<highlight language="config">
</Location>
</highlight>
-<p>Il implémente aussi un gestionnaire nommé <code>forbidden</code> qui
-ne fait que renvoyer la réponse "403 FORBIDDEN" au client. Ce
-gestionnaire peut être spécifié par des directives comme <directive
+<p>Il implémente aussi un gestionnaire nommé <code>forbidden</code> qui
+ne fait que renvoyer la réponse "403 FORBIDDEN" au client. Ce
+gestionnaire peut être spécifié par des directives comme <directive
module="mod_mime">AddHandler</directive>.</p>
</summary>
<directivesynopsis>
<name>AllowHandlers</name>
-<description>Restreint l'accès aux gestionnaires spécifiés</description>
+<description>Restreint l'accès aux gestionnaires spécifiés</description>
<syntax>AllowHandlers [not] none|<em>nom-gestionnaire</em>
[none|<em>nom-gestionnaire</em>]...</syntax>
<default>AllowHandlers all</default>
<usage>
-<p>Les noms de gestionnaires sont sensibles à la casse. Le nom réservé
-<code>none</code> peut être utilisé dans le cas où aucun gestionnaire
-n'a été défini. Le nom réservé <code>all</code>, quant à lui, peut être
-utilisé pour autoriser à nouveau tous les gestionnaires dans une section
-de configuration ultérieure, même si certains en-têtes ont été interdits
+<p>Les noms de gestionnaires sont sensibles à la casse. Le nom réservé
+<code>none</code> peut être utilisé dans le cas où aucun gestionnaire
+n'a été défini. Le nom réservé <code>all</code>, quant à lui, peut être
+utilisé pour autoriser à nouveau tous les gestionnaires dans une section
+de configuration ultérieure, même si certains en-têtes ont été interdits
en aval :</p>
<highlight language="config">
<modulesynopsis metafile="mod_asis.xml.meta">
<name>mod_asis</name>
-<description>Envoie des fichiers contenant leurs propres en-têtes
+<description>Envoie des fichiers contenant leurs propres en-têtes
HTTP</description>
<status>Base</status>
<sourcefile>mod_asis.c</sourcefile>
<summary>
<p>Ce module fournit le gestionnaire <code>send-as-is</code> qui
permet au serveur HTTP Apache d'envoyer le document sans ajouter la plupart des
- en-têtes HTTP habituels.</p>
+ en-têtes HTTP habituels.</p>
- <p>On peut l'utiliser pour envoyer tous types de données en
- provenance du serveur, y compris les redirections et autres réponses
- HTTP spéciales, sans devoir faire appel à un script CGI ou nph.</p>
+ <p>On peut l'utiliser pour envoyer tous types de données en
+ provenance du serveur, y compris les redirections et autres réponses
+ HTTP spéciales, sans devoir faire appel à un script CGI ou nph.</p>
<p>Pour des raisons historiques, ce module traitera aussi tout
fichier dont le type MIME est <code>httpd/send-as-is</code>.</p>
<highlight language="config">AddHandler send-as-is asis</highlight>
- <p>Le contenu de tout fichier possédant l'extension
- <code>.asis</code> sera envoyé par Apache httpd au client pratiquement tel
- quel. En particulier, les en-têtes HTTP seront déduits du fichier
- lui-même selon les règles du module <module>mod_cgi</module>, si
- bien qu'un fichier asis doit inclure des en-têtes valides, et
- utiliser l'en-tête CGI <code>Status:</code> pour déterminer le code de réponse
- HTTP. L'en-tête <code>Content-Length:</code> sera automatiquement
- inséré ou, s'il est déjà présent, corrigé par httpd.</p>
+ <p>Le contenu de tout fichier possédant l'extension
+ <code>.asis</code> sera envoyé par Apache httpd au client pratiquement tel
+ quel. En particulier, les en-têtes HTTP seront déduits du fichier
+ lui-même selon les règles du module <module>mod_cgi</module>, si
+ bien qu'un fichier asis doit inclure des en-têtes valides, et
+ utiliser l'en-tête CGI <code>Status:</code> pour déterminer le code de réponse
+ HTTP. L'en-tête <code>Content-Length:</code> sera automatiquement
+ inséré ou, s'il est déjà présent, corrigé par httpd.</p>
- <p>Voici un exemple de fichier dont le contenu est envoyé <em>tel
- quel</em> pour informer un client qu'un fichier a été déplacé.</p>
+ <p>Voici un exemple de fichier dont le contenu est envoyé <em>tel
+ quel</em> pour informer un client qu'un fichier a été déplacé.</p>
<example>
<title>Mauvaises excuses</title><br />
</head><br />
<body><br />
- <h1>La merveilleuse page de Fred a été déplacée vers<br />
+ <h1>La merveilleuse page de Fred a été déplacée vers<br />
<a href="http://xyz.example.com/foo/bar.html">le site de
Joe</a>.<br />
</h1><br />
</example>
<note><title>Notes :</title>
- <p>Le serveur ajoute systématiquement les en-têtes
- <code>Date:</code> et <code>Server:</code> aux données qu'il envoie
- au client, si bien qu'ils n'ont pas besoin d'être inclus dans le
- fichier. Le serveur n'ajoute <em>pas</em> d'en-tête
+ <p>Le serveur ajoute systématiquement les en-têtes
+ <code>Date:</code> et <code>Server:</code> aux données qu'il envoie
+ au client, si bien qu'ils n'ont pas besoin d'être inclus dans le
+ fichier. Le serveur n'ajoute <em>pas</em> d'en-tête
<code>Last-Modified</code>, ce qu'il devrait probablement faire.</p>
</note>
</section>
<modulesynopsis metafile="mod_authn_anon.xml.meta">
<name>mod_authn_anon</name>
-<description>Permet un accès "anonyme" à des zones
-authentifiées</description>
+<description>Permet un accès "anonyme" à des zones
+authentifiées</description>
<status>Extension</status>
<sourcefile>mod_authn_anon.c</sourcefile>
<identifier>authn_anon_module</identifier>
<summary>
<p>Ce module permet aux frontaux d'authentification comme
<module>mod_auth_basic</module> d'authentifier les utilisateurs
- à la manière des sites FTP anonymes, c'est à dire
- en fournissant l'identifiant utilisateur spécial 'anonymous' et
- l'adresse email comme mot de passe. Ces adresses email peuvent être
- journalisées.</p>
-
- <p>En combinaison avec d'autres méthodes de contrôle d'accès (base
- de données), ce module permet d'effectuer un véritable suivi des
- utilisateurs et une personnalisation de leurs accès en fonction de
- leur profil, tout en conservant l'accessibilité du site aux
- utilisateurs 'non enregistrés'. Un avantage du suivi des
- utilisateurs basé sur l'authentification réside dans le fait qu'il
- est, à l'opposé des cookies magiques et des drôles d'URLs avec
- préfixes ou suffixes, entièrement indépendant du navigateur et qu'il
+ à la manière des sites FTP anonymes, c'est à dire
+ en fournissant l'identifiant utilisateur spécial 'anonymous' et
+ l'adresse email comme mot de passe. Ces adresses email peuvent être
+ journalisées.</p>
+
+ <p>En combinaison avec d'autres méthodes de contrôle d'accès (base
+ de données), ce module permet d'effectuer un véritable suivi des
+ utilisateurs et une personnalisation de leurs accès en fonction de
+ leur profil, tout en conservant l'accessibilité du site aux
+ utilisateurs 'non enregistrés'. Un avantage du suivi des
+ utilisateurs basé sur l'authentification réside dans le fait qu'il
+ est, à l'opposé des cookies magiques et des drôles d'URLs avec
+ préfixes ou suffixes, entièrement indépendant du navigateur et qu'il
permet de partager des URLs entre plusieurs utilisateurs.</p>
<p>Si l'on utilise le module <module>mod_auth_basic</module>, le
- module <module>mod_authn_anon</module> est invoqué en affectant la
- valeur <code>anon</code> à la directive <directive
+ module <module>mod_authn_anon</module> est invoqué en affectant la
+ valeur <code>anon</code> à la directive <directive
module="mod_auth_basic">AuthBasicProvider</directive>.</p>
</summary>
<section id="example"><title>Exemple</title>
- <p>L'exemple ci-dessous présente un exemple de combinaison avec
- l'authentification à base de fichier htpasswd "normale", et permet
- la connexion d'utilisateurs en tant qu'invités avec les propriétés
+ <p>L'exemple ci-dessous présente un exemple de combinaison avec
+ l'authentification à base de fichier htpasswd "normale", et permet
+ la connexion d'utilisateurs en tant qu'invités avec les propriétés
suivantes :</p>
<ul>
- <li>Il incite l'utilisateur à fournir un identifiant.
+ <li>Il incite l'utilisateur à fournir un identifiant.
(<directive module="mod_authn_anon"
>Anonymous_NoUserID</directive>)</li>
- <li>Il incite l'utilisateur à fournir un mot de passe.
+ <li>Il incite l'utilisateur à fournir un mot de passe.
(<directive module="mod_authn_anon"
>Anonymous_MustGiveEmail</directive>)</li>
- <li>Le mot de passe fourni doit être une adresse email valide,
- c'est à dire contenant au moins un '@' et un '.'.
+ <li>Le mot de passe fourni doit être une adresse email valide,
+ c'est à dire contenant au moins un '@' et un '.'.
(<directive module="mod_authn_anon"
>Anonymous_VerifyEmail</directive>)</li>
<li>Les valeurs possibles pour l'identifiant utilisateur sont
<code>anonymous, guest, www, test ou welcome</code>, et la
- vérification n'est <strong>pas</strong> sensible à la casse.
+ vérification n'est <strong>pas</strong> sensible à la casse.
(<directive module="mod_authn_anon"
>Anonymous</directive>)</li>
- <li>Les adresses email entrées dans le champ passwd sont
- enregistrées dans le fichier journal des erreurs.
+ <li>Les adresses email entrées dans le champ passwd sont
+ enregistrées dans le fichier journal des erreurs.
(<directive module="mod_authn_anon"
>Anonymous_LogEmail</directive>)</li>
</ul>
<directivesynopsis>
<name>Anonymous</name>
-<description>Définit la liste des identifiants utilisateur autorisés à
-accéder sans vérification du mot de passe</description>
+<description>Définit la liste des identifiants utilisateur autorisés à
+accéder sans vérification du mot de passe</description>
<syntax>Anonymous <var>utilisateur</var> [<var>utilisateur</var>]
...</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
<override>AuthConfig</override>
<usage>
- <p>Une liste d'un ou plusieurs identifiants utilisateur spéciaux
- autorisés à accéder sans vérification du mot de passe. Les
- identifiants doivent être séparés par un espace. Pour spécifier un
+ <p>Une liste d'un ou plusieurs identifiants utilisateur spéciaux
+ autorisés à accéder sans vérification du mot de passe. Les
+ identifiants doivent être séparés par un espace. Pour spécifier un
identifiant contenant un espace, on peut utiliser les guillemets '
- ou ", ou le caractère d'échappement \.</p>
+ ou ", ou le caractère d'échappement \.</p>
- <p>Veuillez noter que la vérification <strong>n'est pas sensible à
+ <p>Veuillez noter que la vérification <strong>n'est pas sensible à
la casse</strong>.<br />
- Il est fortement conseillé d'intégrer l'utilisateur spécial
+ Il est fortement conseillé d'intégrer l'utilisateur spécial
'<code>anonymous</code>' dans la liste des identifiants.</p>
<example><title>Exemple:</title>
</highlight>
</example>
- <p>Dans cet exemple, l'utilisateur peut accéder au site sans
- vérification du mot de passe en utilisant l'identifiant "anonymous",
+ <p>Dans cet exemple, l'utilisateur peut accéder au site sans
+ vérification du mot de passe en utilisant l'identifiant "anonymous",
"Not Registered", "I Don't Know" ou encore "AnonyMous".</p>
<p>Depuis Apache 2.1, il est possible de remplacer la liste des
- identifiants autorisés par le caractère "<code>*</code>", ce qui
+ identifiants autorisés par le caractère "<code>*</code>", ce qui
permet d'utiliser <em>n'importe quel</em> identifiant pour pouvoir
- accéder au site.</p>
+ accéder au site.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_LogEmail</name>
-<description>Détermine si le mot de passe fourni sera enregistré dans le
+<description>Détermine si le mot de passe fourni sera enregistré dans le
journal des erreurs</description>
<syntax>Anonymous_LogEmail On|Off</syntax>
<default>Anonymous_LogEmail On</default>
<override>AuthConfig</override>
<usage>
- <p>Lorsque cette directive est définie à <code>On</code>, valeur
- par défaut, le 'mot de passe' fourni (censé contenir une adresse
- email valide) est enregistré dans le journal des erreurs.</p>
+ <p>Lorsque cette directive est définie à <code>On</code>, valeur
+ par défaut, le 'mot de passe' fourni (censé contenir une adresse
+ email valide) est enregistré dans le journal des erreurs.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_MustGiveEmail</name>
-<description>Détermine si l'abscence de mot de passe est
-autorisée</description>
+<description>Détermine si l'abscence de mot de passe est
+autorisée</description>
<syntax>Anonymous_MustGiveEmail On|Off</syntax>
<default>Anonymous_MustGiveEmail On</default>
<contextlist><context>directory</context><context>.htaccess</context>
<override>AuthConfig</override>
<usage>
- <p>Détermine si l'utilisateur doit spécifier une adresse email comme
- mot de passe. Lorsque cette directive est définie à <code>On</code>,
+ <p>Détermine si l'utilisateur doit spécifier une adresse email comme
+ mot de passe. Lorsque cette directive est définie à <code>On</code>,
fournir un mot de passe est obligatoire.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_NoUserID</name>
-<description>Détermine si le champ identifiant peut être
+<description>Détermine si le champ identifiant peut être
vide</description>
<syntax>Anonymous_NoUserID On|Off</syntax>
<default>Anonymous_NoUserID Off</default>
<override>AuthConfig</override>
<usage>
- <p>Lorsque cette directive est définie à <code>On</code>, les
- utilisateurs peuvent laisser le champ identifiant vide (et peut-être
- aussi le champ mot de passe selon la définition de la directive
+ <p>Lorsque cette directive est définie à <code>On</code>, les
+ utilisateurs peuvent laisser le champ identifiant vide (et peut-être
+ aussi le champ mot de passe selon la définition de la directive
<directive
module="mod_authn_anon">Anonymous_MustGiveEmail</directive>). Ceci
- peut s'avérer très utile pour les utilisateurs de MS-Explorer qui
- ont pour seule possibilité d'appuyer sur Entrée ou de cliquer
- directement sur le bouton OK, ce qui semble être une réaction
+ peut s'avérer très utile pour les utilisateurs de MS-Explorer qui
+ ont pour seule possibilité d'appuyer sur Entrée ou de cliquer
+ directement sur le bouton OK, ce qui semble être une réaction
naturelle.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_VerifyEmail</name>
-<description>Détermine s'il faut vérifier que le format de l'adresse
+<description>Détermine s'il faut vérifier que le format de l'adresse
email fournie comme mot de passe est correct</description>
<syntax>Anonymous_VerifyEmail On|Off</syntax>
<default>Anonymous_VerifyEmail Off</default>
<override>AuthConfig</override>
<usage>
- <p>Lorsque cette directive est définie à <code>On</code>, Apache
- vérifie que le 'mot de passe' entré contient au moins un '@' et un
- '.' afin d'inciter les utilisateurs à fournir des adresses email
+ <p>Lorsque cette directive est définie à <code>On</code>, Apache
+ vérifie que le 'mot de passe' entré contient au moins un '@' et un
+ '.' afin d'inciter les utilisateurs à fournir des adresses email
valides (voir ci-dessus la directive <directive
module="mod_authn_anon">Anonymous_LogEmail</directive>).</p>
</usage>
<modulesynopsis metafile="mod_authn_file.xml.meta">
<name>mod_authn_file</name>
-<description>Authentification utilisateur à l'aide de fichiers
+<description>Authentification utilisateur à l'aide de fichiers
texte</description>
<status>Base</status>
<sourcefile>mod_authn_file.c</sourcefile>
<module>mod_auth_digest</module> et <module>mod_auth_basic</module>
d'authentifier les utilisateurs en les recherchant dans des fichiers
de mots de passe au format texte. <module>mod_authn_dbm</module>
- fournit une fonctionnalité similaire.</p>
+ fournit une fonctionnalité similaire.</p>
<p>Lorsqu'on utilise <module>mod_auth_basic</module> ou
- <module>mod_auth_digest</module>, ce module peut être invoqué en
- affectant la valeur <code>file</code> à la directive <directive
+ <module>mod_auth_digest</module>, ce module peut être invoqué en
+ affectant la valeur <code>file</code> à la directive <directive
module="mod_auth_basic">AuthBasicProvider</directive> ou <directive
module="mod_auth_digest">AuthDigestProvider</directive>.</p>
</summary>
<directivesynopsis>
<name>AuthUserFile</name>
-<description>Définit le nom d'un fichier texte pour l'authentification
+<description>Définit le nom d'un fichier texte pour l'authentification
contenant la liste des utilisateurs et de leurs mots de
passe</description>
<syntax>AuthUserFile <var>chemin-fichier</var></syntax>
<usage>
<p>La directive <directive>AuthUserFile</directive> permet de
- définir le nom d'un fichier texte pour l'authentification contenant
+ définir le nom d'un fichier texte pour l'authentification contenant
la liste des utilisateurs et de leurs mots de passe.
<var>chemin-fichier</var> est le chemin vers le fichier
- des utilisateurs. S'il n'est pas absolu, il est considéré comme
- relatif au répertoire défini par la directive <directive
+ des utilisateurs. S'il n'est pas absolu, il est considéré comme
+ relatif au répertoire défini par la directive <directive
module="core">ServerRoot</directive>.</p>
<p>Chaque ligne du fichier des utilisateurs se compose du nom de
- l'utilisateur, du caractère ':' et du mot de passe chiffré. Si le
- même identifiant utilisateur est référencé plusieurs fois,
- <module>mod_authn_file</module> utilisera la première occurrence pour
- vérifier le mot de passe.</p>
+ l'utilisateur, du caractère ':' et du mot de passe chiffré. Si le
+ même identifiant utilisateur est référencé plusieurs fois,
+ <module>mod_authn_file</module> utilisera la première occurrence pour
+ vérifier le mot de passe.</p>
- <p>Le format du mot de passe chiffré dépend du frontal
- d'authentification utilisé (par exemple
+ <p>Le format du mot de passe chiffré dépend du frontal
+ d'authentification utilisé (par exemple
<module>mod_auth_basic</module> ou
<module>mod_auth_digest</module>). Voir la documentation sur les
<a href="../misc/password_encryptions.html">Formats de mots de
- passe</a> pour plus de détails.</p>
+ passe</a> pour plus de détails.</p>
<p>Pour <module>mod_auth_basic</module>, utilisez le programme
<program>htpasswd</program> fourni avec la distribution binaire,
- mais que vous trouverez aussi dans le répertoire
+ mais que vous trouverez aussi dans le répertoire
<code>src/support</code> de l'arborescence des sources. Voir sa <a
href="../programs/htpasswd.html">page de manuel</a> pour plus de
- détails. En bref :</p>
+ détails. En bref :</p>
- <p>On crée un fichier de mots de passe <code>nom-fichier</code> avec
+ <p>On crée un fichier de mots de passe <code>nom-fichier</code> avec
<code>nom-utilisateur</code> comme identifiant initial. Le mot de
- passe correspondant sera alors demandé :</p>
+ passe correspondant sera alors demandé :</p>
<example>
htpasswd -c nom-fichier nom-utilisateur
htpasswd nom-fichier nom-utilisateur2
</example>
- <p>Noter qu'une recherche dans de grands fichiers texte peut être
- très longue ; dans ce cas, il vaut mieux utiliser les fichiers DBM
+ <p>Noter qu'une recherche dans de grands fichiers texte peut être
+ très longue ; dans ce cas, il vaut mieux utiliser les fichiers DBM
avec la directive <directive
module="mod_authn_dbm">AuthDBMUserFile</directive>.</p>
<p>Pour <module>mod_auth_digest</module>, vous devez utiliser
le programme <program>htdigest</program>.
- Notez que vous ne pouvez pas mélanger des données utilisateur pour
- l'Authentification HTTP à base de condensé et des données pour
- l'Authentification de Base dans le même fichier.</p>
+ Notez que vous ne pouvez pas mélanger des données utilisateur pour
+ l'Authentification HTTP à base de condensé et des données pour
+ l'Authentification de Base dans le même fichier.</p>
- <note type="warning"><title>Sécurité</title>
+ <note type="warning"><title>Sécurité</title>
<p>Assurez-vous que le fichier <directive>AuthUserFile</directive>
- soit bien stocké en dehors de l'arborescence des documents du
+ soit bien stocké en dehors de l'arborescence des documents du
serveur web. Ne placez <strong>pas</strong> ce fichier dans le
- répertoire qu'il protège. Dans le cas contraire, les clients
- seraient en mesure de télécharger le fichier des mots de passe.</p>
+ répertoire qu'il protège. Dans le cas contraire, les clients
+ seraient en mesure de télécharger le fichier des mots de passe.</p>
</note>
</usage>
</directivesynopsis>
<modulesynopsis metafile="mod_authnz_fcgi.xml.meta">
<name>mod_authnz_fcgi</name>
-<description>Permet à une application d'autorisation FastCGI de gérer
+<description>Permet à une application d'autorisation FastCGI de gérer
l'authentification et l'autorisation httpd.</description>
<status>Extension</status>
<sourcefile>mod_authnz_fcgi.c</sourcefile>
<identifier>authnz_fcgi_module</identifier>
-<compatibility>Disponible à partir de la version 2.4.10 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.4.10 du serveur HTTP
Apache</compatibility>
<summary>
<p>Ce module permet aux applications d'autorisation FastCGI
- d'authentifier les utilisateurs et de contrôler leur accès aux
- ressources. Il supporte les systèmes d'autorisation FastCGI
- génériques qui participent en une seule phase à l'authentification
- et à l'autorisation, ainsi que les processus d'authentification et
- d'autorisation spécifiques à Apache httpd qui interviennent en une
+ d'authentifier les utilisateurs et de contrôler leur accès aux
+ ressources. Il supporte les systèmes d'autorisation FastCGI
+ génériques qui participent en une seule phase à l'authentification
+ et à l'autorisation, ainsi que les processus d'authentification et
+ d'autorisation spécifiques à Apache httpd qui interviennent en une
ou plusieurs phases.</p>
<p>Les processus d'autorisation FastCGI peuvent authentifier un
utilisateur via son identificateur et son mot de passe comme dans le
- processus d'authentification basique, ou via un mécanisme
+ processus d'authentification basique, ou via un mécanisme
arbitraire.</p>
</summary>
<seealso><a href="../howto/auth.html">Authentification, autorisation et
-contrôle d'accès</a></seealso>
+contrôle d'accès</a></seealso>
<seealso><module>mod_auth_basic</module></seealso>
<seealso><program>fcgistarter</program></seealso>
<seealso><module>mod_proxy_fcgi</module></seealso>
<section id="invocations"><title>Modes d'invocation</title>
<p>Les modes d'invocation des processus d'autorisation FastCGI que
- ce module supporte se distinguent par deux caractéristiques : le
- <em>type</em> et le <em>mécanisme</em> d'authentification.</p>
+ ce module supporte se distinguent par deux caractéristiques : le
+ <em>type</em> et le <em>mécanisme</em> d'authentification.</p>
<p>Le <em>Type</em> est simplement <code>authn</code> pour
l'authentification, <code>authz</code> pour l'autorisation et
<code>authnz</code> l'authentification et l'autorisation.</p>
- <p>Le <em>mécanisme</em> d'authentification fait référence aux
- mécanismes d'authentification et aux phases de traitement de la
- configuration de Apache httpd, et peut être
+ <p>Le <em>mécanisme</em> d'authentification fait référence aux
+ mécanismes d'authentification et aux phases de traitement de la
+ configuration de Apache httpd, et peut être
<code>AuthBasicProvider</code>, <code>Require</code>, ou
- <code>check_user_id</code>. Les deux premiers mécanismes
- correspondent aux directives utilisées pour participer aux phases de
- traitement appropriées.</p>
+ <code>check_user_id</code>. Les deux premiers mécanismes
+ correspondent aux directives utilisées pour participer aux phases de
+ traitement appropriées.</p>
<p>Description de chaque mode:</p>
<dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
<code>AuthBasicProvider</code></dt>
- <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
+ <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
<code>AUTHORIZER</code>, et la variable
- <code>FCGI_APACHE_ROLE</code> à <code>AUTHENTICATOR</code>.
- L'application doit être spécifiée en tant que fournisseur de type
+ <code>FCGI_APACHE_ROLE</code> à <code>AUTHENTICATOR</code>.
+ L'application doit être spécifiée en tant que fournisseur de type
<em>authn</em> via la directive <directive
module="mod_authnz_fcgi">AuthnzFcgiDefineProvider</directive>, et
- activée via la directive <directive
+ activée via la directive <directive
module="mod_auth_basic">AuthBasicProvider</directive>. Lorsqu'elle
- est invoquée, l'application est censée authentifier le client à
+ est invoquée, l'application est censée authentifier le client à
l'aide de l'identifiant et du mot de passe de l'utilisateur.
Exemple d'application :
<dt><em>Type</em> <code>authz</code>, <em>mechanism</em>
<code>Require</code></dt>
- <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
- <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code> à
- <code>AUTHORIZER</code>. L'application doit être spécifiée en tant
+ <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
+ <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code> à
+ <code>AUTHORIZER</code>. L'application doit être spécifiée en tant
que fournisseur de type <em>authz</em> via la directive <directive
module="mod_authnz_fcgi">AuthnzFcgiDefineProvider</directive>.
- Lorsqu'elle est invoquée, l'application est censée contrôler les
- accès du client à l'aide de l'identifiant utilisateur et d'autres
- données contenues dans la requête. Exemple d'application :
+ Lorsqu'elle est invoquée, l'application est censée contrôler les
+ accès du client à l'aide de l'identifiant utilisateur et d'autres
+ données contenues dans la requête. Exemple d'application :
<highlight language="perl">
#!/usr/bin/perl
use FCGI;
<dd>Dans ce mode qui supporte le protocole d'autorisation web
server-agnostic FastCGI, la variable <code>FCGI_ROLE</code> est
- définie à <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code>
- n'est pas définie. L'application doit être spécifiée en tant que
+ définie à <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code>
+ n'est pas définie. L'application doit être spécifiée en tant que
fournisseur de type <em>authnz</em> via la directive <directive
module="mod_authnz_fcgi">AuthnzFcgiDefineProvider</directive>.
- L'application est censée assurer l'authentification et
- l'autorisation au cours d'une même invocation à l'aide de
+ L'application est censée assurer l'authentification et
+ l'autorisation au cours d'une même invocation à l'aide de
l'identifiant et du mot de passe de l'utilisateur et d'autres
- données contenues dans la requête. L'invocation de l'application
+ données contenues dans la requête. L'invocation de l'application
intervient au cours de la phase d'authentification de l'API Apache
- httpd. Si l'application renvoie le code 200, et si le même
- fournisseur est invoqué au cours de la phase d'autorisation (via
+ httpd. Si l'application renvoie le code 200, et si le même
+ fournisseur est invoqué au cours de la phase d'autorisation (via
une directive <directive>Require</directive>), mod_authnz_fcgi
renverra un code de type success pour la phase d'autorisation sans
invoquer l'application. Exemple d'application :
<dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
<code>check_user_id</code></dt>
- <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
- <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code> à
- <code>AUTHENTICATOR</code>. L'application doit être spécifiée en
+ <dd>Dans ce mode, la variable <code>FCGI_ROLE</code> est définie à
+ <code>AUTHORIZER</code> et <code>FCGI_APACHE_ROLE</code> à
+ <code>AUTHENTICATOR</code>. L'application doit être spécifiée en
tant que fournisseur de type <em>authn</em> via une directive
<directive
module="mod_authnz_fcgi">AuthnzFcgiDefineProvider</directive>. La
</section>
-<section id="examples"><title>Exemples supplémentaires</title>
+<section id="examples"><title>Exemples supplémentaires</title>
<ol>
- <li>Si votre application supporte séparément les rôles
+ <li>Si votre application supporte séparément les rôles
d'authentification et d'autorisation (<code>AUTHENTICATOR</code> et
- <code>AUTHORIZER</code>), vous pouvez définir des fournisseurs
- séparés comme suit, même s'ils correspondent à la même application :
+ <code>AUTHORIZER</code>), vous pouvez définir des fournisseurs
+ séparés comme suit, même s'ils correspondent à la même application :
<highlight language="config">
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10102/
</highlight>
- Spécifie le fournisseur authn via la directive
+ Spécifie le fournisseur authn via la directive
<directive module="mod_auth_basic">AuthBasicProvider</directive>
et le fournisseur authz via la directive
<directive module="mod_authz_core">Require</directive>:
</highlight>
</li>
- <li>Si votre application supporte le rôle générique
+ <li>Si votre application supporte le rôle générique
<code>AUTHORIZER</code> (authentification et autorisation en une
- seule invocation), vous pouvez définir un fournisseur unique comme
+ seule invocation), vous pouvez définir un fournisseur unique comme
suit :
<highlight language="config">
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/
</highlight>
- Spécifie le fournisseur authnz via les directives
+ Spécifie le fournisseur authnz via les directives
<directive>AuthBasicProvider</directive> et
<directive>Require</directive> :
<section id="limitations"><title>Limitations</title>
- <p>Les fonctionnalités suivantes ne sont pas encore implémentées :</p>
+ <p>Les fonctionnalités suivantes ne sont pas encore implémentées :</p>
<dl>
- <dt>Vérificateur d'accès d'Apache httpd</dt>
+ <dt>Vérificateur d'accès d'Apache httpd</dt>
<dd>La phase <em>access check</em> de l'API Apache httpd est
distincte des phases d'authentification et d'autorisation.
- Certaines autres implémentations de FastCGI supportent cette phase
+ Certaines autres implémentations de FastCGI supportent cette phase
et lorsque c'est le cas, la variable <code>FCGI_APACHE_ROLE</code>
- est définie à <code>ACCESS_CHECKER</code>.</dd>
+ est définie à <code>ACCESS_CHECKER</code>.</dd>
<dt>Redirections (pipes) ou sockets locaux (Unix)</dt>
- <dd>Seuls les sockets TCP sont actuellement supportés.</dd>
+ <dd>Seuls les sockets TCP sont actuellement supportés.</dd>
<dt>Support de mod_authn_socache</dt>
<dd>Le support de l'interaction avec mod_authn_socache pour les
applications qui interviennent dans le processus
d'authentification d'Apache httpd serait souhaitable.</dd>
- <dt>Support de l'authentification de type digest à l'aide de AuthDigestProvider</dt>
+ <dt>Support de l'authentification de type digest à l'aide de AuthDigestProvider</dt>
<dd>Cette limitation ne sera probablement jamais franchie car il
- n'existe aucun flux de données d'autorisation capable de lire dans
- un condensé de type hash.</dd>
+ n'existe aucun flux de données d'autorisation capable de lire dans
+ un condensé de type hash.</dd>
<dt>Gestion des processus applicatifs</dt>
- <dd>Cette fonctionnalité restera probablement hors de portée de ce
- module. Il faudra donc gérer les processus applicatifs d'une autre
- manière ; par exemple, <program>fcgistarter</program> permet de
- les démarrer.</dd>
+ <dd>Cette fonctionnalité restera probablement hors de portée de ce
+ module. Il faudra donc gérer les processus applicatifs d'une autre
+ manière ; par exemple, <program>fcgistarter</program> permet de
+ les démarrer.</dd>
<dt>AP_AUTH_INTERNAL_PER_URI</dt>
- <dd>Tous les fournisseurs sont actuellement enregistrés en tant
+ <dd>Tous les fournisseurs sont actuellement enregistrés en tant
que AP_AUTH_INTERNAL_PER_CONF, ce qui signifie que les
- vérifications ne sont pas effectuées pour les
- sous-requêtes internes avec la même configuration de contrôle
- d'accès que la requête initiale.</dd>
+ vérifications ne sont pas effectuées pour les
+ sous-requêtes internes avec la même configuration de contrôle
+ d'accès que la requête initiale.</dd>
- <dt>Conversion du jeu de caractères des données de protocole</dt>
- <dd>Si mod_authnz_fcgi s'exécute dans un environnement de
- compilation EBCDIC, toutes les données de protocole FastCGI sont
- écrites en EBCDIC et doivent être disponibles en EBCDIC.</dd>
+ <dt>Conversion du jeu de caractères des données de protocole</dt>
+ <dd>Si mod_authnz_fcgi s'exécute dans un environnement de
+ compilation EBCDIC, toutes les données de protocole FastCGI sont
+ écrites en EBCDIC et doivent être disponibles en EBCDIC.</dd>
- <dt>Plusieurs requêtes pour une connexion</dt>
+ <dt>Plusieurs requêtes pour une connexion</dt>
<dd>Actuellement, la connexion au fournisseur d'autorisation
- FastCGI est fermée après chaque phase de traitement. Par exemple,
- si le fournisseur d'autorisation gère séparément les phases
+ FastCGI est fermée après chaque phase de traitement. Par exemple,
+ si le fournisseur d'autorisation gère séparément les phases
<em>authn</em> et <em>authz</em>, deux connexions seront
- nécessaires.</dd>
+ nécessaires.</dd>
<dt>Redirection de certains URIs</dt>
- <dd>Les URIs en provenance des clients ne peuvent pas être
- redirigés selon une table de redirection, comme avec la directive
- <directive>ProxyPass</directive> utilisée avec les répondeurs
+ <dd>Les URIs en provenance des clients ne peuvent pas être
+ redirigés selon une table de redirection, comme avec la directive
+ <directive>ProxyPass</directive> utilisée avec les répondeurs
FastCGI.</dd>
</dl>
<section id="logging"><title>Journalisation</title>
<ol>
- <li>Les erreurs de traitement sont journalisées à un niveau
- <code>error</code> ou supérieur.</li>
- <li>Les messages envoyés par l'application sont journalisés au
+ <li>Les erreurs de traitement sont journalisées à un niveau
+ <code>error</code> ou supérieur.</li>
+ <li>Les messages envoyés par l'application sont journalisés au
niveau <code>warn</code>.</li>
- <li>Les messages de deboguage à caractère général sont
- journalisés au niveau <code>debug</code>.</li>
- <li>Les variables d'environnement transmises à l'application
- sont journalisées au niveau <code>trace2</code>. La valeur de la
- variable <code>REMOTE_PASSWD</code> sera occultée, mais
- <strong>toute autre donnée sensible sera visible dans le
+ <li>Les messages de deboguage à caractère général sont
+ journalisés au niveau <code>debug</code>.</li>
+ <li>Les variables d'environnement transmises à l'application
+ sont journalisées au niveau <code>trace2</code>. La valeur de la
+ variable <code>REMOTE_PASSWD</code> sera occultée, mais
+ <strong>toute autre donnée sensible sera visible dans le
journal</strong>.</li>
- <li>Toutes les entrées/sorties entre le module et l'application
+ <li>Toutes les entrées/sorties entre le module et l'application
FastCGI, y compris les variables d'environnement, seront
- journalisées au format imprimable et hexadécimal au niveau
- <code>trace5</code>. <strong>Toutes les données sensibles seront
+ journalisées au format imprimable et hexadécimal au niveau
+ <code>trace5</code>. <strong>Toutes les données sensibles seront
visibles dans le journal.</strong></li>
</ol>
<p>La directive <directive module="core">LogLevel</directive> permet
- de configurer un niveau de journalisation spécifique à
+ de configurer un niveau de journalisation spécifique à
mod_authnz_fcgi. Par exemple :</p>
<highlight language="config">
<directivesynopsis>
<name>AuthnzFcgiDefineProvider</name>
-<description>Définit une application FastCGI en tant que fournisseur
+<description>Définit une application FastCGI en tant que fournisseur
d'authentification et/ou autorisation</description>
<syntax>AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
<em>backend-address</em></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<usage>
- <p>Cette directive permet de définir une application FastCGI en tant
- que fournisseur pour une phase particulière d'authentification ou
+ <p>Cette directive permet de définir une application FastCGI en tant
+ que fournisseur pour une phase particulière d'authentification ou
d'autorisation.</p>
<dl>
<dt><em>type</em></dt>
- <dd>Les valeurs de ce paramètre sont <em>authn</em> pour
+ <dd>Les valeurs de ce paramètre sont <em>authn</em> pour
l'authentification, <em>authz</em> pour l'autorisation, ou
- <em>authnz</em> pour un fournisseur d'autorisation générique
- FastCGI qui effectue les deux vérifications.</dd>
+ <em>authnz</em> pour un fournisseur d'autorisation générique
+ FastCGI qui effectue les deux vérifications.</dd>
<dt><em>provider-name</em></dt>
- <dd>Ce paramètre permet d'associer un nom au fournisseur ; ce nom
- pourra être utilisé dans des directives comme <directive
+ <dd>Ce paramètre permet d'associer un nom au fournisseur ; ce nom
+ pourra être utilisé dans des directives comme <directive
module="mod_auth_basic">AuthBasicProvider</directive> et
<directive module="mod_authz_core">Require</directive>.</dd>
<dt><em>backend-address</em></dt>
- <dd>Ce paramètre permet de spécifier l'adresse de l'application
+ <dd>Ce paramètre permet de spécifier l'adresse de l'application
sous la forme <em>fcgi://hostname:port/</em>. Le ou les processus
- de l'application doivent être gérés indépendamment comme avec
+ de l'application doivent être gérés indépendamment comme avec
<program>fcgistarter</program>.</dd>
</dl>
</usage>
<directivesynopsis>
<name>AuthnzFcgiCheckAuthnProvider</name>
-<description>Permet à une application FastCGI de gérer l'accroche
+<description>Permet à une application FastCGI de gérer l'accroche
d'authentification check_authn.</description>
<syntax>AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
<em>option</em> ...</syntax>
<contextlist><context>directory</context></contextlist>
<override>FileInfo</override>
<usage>
- <p>Cette directive permet de confier à une application FastCGI la
- gestion d'une phase spécifique du processus d'authentification ou
+ <p>Cette directive permet de confier à une application FastCGI la
+ gestion d'une phase spécifique du processus d'authentification ou
d'autorisation.</p>
- <p>Certaines fonctionnalités des fournisseurs d'autorisation FastCGI
- nécessitent cette directive en lieu et place de
- <directive>AuthBasicProvider</directive> pour pouvoir être activées :</p>
+ <p>Certaines fonctionnalités des fournisseurs d'autorisation FastCGI
+ nécessitent cette directive en lieu et place de
+ <directive>AuthBasicProvider</directive> pour pouvoir être activées :</p>
<ul>
- <li>L'authentification de type autre que basique ; en général,
- détermination de l'identifiant utilisateur et renvoi de sa valeur
+ <li>L'authentification de type autre que basique ; en général,
+ détermination de l'identifiant utilisateur et renvoi de sa valeur
depuis le fournisseur d'autorisation ; voir l'option
<code>UserExpr</code> ci-dessous</li>
- <li>Sélection d'un code de réponse personnalisé ; en cas de
- code de réponse autre que 200 en provenance du fournisseur
- d'autorisation, c'est ce code qui sera utilisé comme code d'état
- de la réponse</li>
- <li>Définition du corps d'une réponse autre que 200 ; si le
- fournisseur d'autorisation renvoie un corps de réponse avec un
- code autre que 200, c'est ce corps de réponse qui sera renvoyé au
- client ; la longueur du texte est limitée à 8192 octets</li>
+ <li>Sélection d'un code de réponse personnalisé ; en cas de
+ code de réponse autre que 200 en provenance du fournisseur
+ d'autorisation, c'est ce code qui sera utilisé comme code d'état
+ de la réponse</li>
+ <li>Définition du corps d'une réponse autre que 200 ; si le
+ fournisseur d'autorisation renvoie un corps de réponse avec un
+ code autre que 200, c'est ce corps de réponse qui sera renvoyé au
+ client ; la longueur du texte est limitée à 8192 octets</li>
</ul>
<dl>
<dt><em>provider-name</em></dt>
- <dd>C'est le nom du fournisseur défini au préalable via la
+ <dd>C'est le nom du fournisseur défini au préalable via la
directive <directive>AuthnzFcgiDefineProvider</directive>.</dd>
<dt><code>None</code></dt>
- <dd>Spécifiez <code>None</code> pour désactiver un fournisseur
- activé avec cette même directive dans une autre portée, par
- exemple dans un répertoire parent.</dd>
+ <dd>Spécifiez <code>None</code> pour désactiver un fournisseur
+ activé avec cette même directive dans une autre portée, par
+ exemple dans un répertoire parent.</dd>
<dt><em>option</em></dt>
- <dd>Les options suivantes sont supportées :
+ <dd>Les options suivantes sont supportées :
<dl>
- <dt>Authoritative On|Off (par défaut On)</dt>
- <dd>Cette option permet de définir si l'appel à d'autres
- modules est autorisé lorsqu'un fournisseur d'autorisation FastCGI a
- été configuré et si la requête échoue.</dd>
+ <dt>Authoritative On|Off (par défaut On)</dt>
+ <dd>Cette option permet de définir si l'appel à d'autres
+ modules est autorisé lorsqu'un fournisseur d'autorisation FastCGI a
+ été configuré et si la requête échoue.</dd>
<dt>DefaultUser <em>id utilisateur</em></dt>
<dd>Lorsque le fournisseur d'autorisation donne son accord, et
- si <code>UserExpr</code> est défini et correspond à une chaîne
+ si <code>UserExpr</code> est défini et correspond à une chaîne
vide, (par exemple, si le fournisseur d'autorisation ne renvoie
- aucune variable), c'est cette valeur qui sera utilisée comme id
- utilisateur par défaut. Cela se produit souvent lorsqu'on se trouve dans
- un contexte d'invité, ou d'utilisateur non authentifié ;
- les utilisateurs et invités se voient alors attribué un id
- utilisateur spécifique qui permettra de se connecter et
- d'accéder à certaines ressources.</dd>
-
- <dt>RequireBasicAuth On|Off (par défaut Off)</dt>
- <dd>Cette option permet de définir si l'authentification
- basique est requise avant de transmettre la requête au
+ aucune variable), c'est cette valeur qui sera utilisée comme id
+ utilisateur par défaut. Cela se produit souvent lorsqu'on se trouve dans
+ un contexte d'invité, ou d'utilisateur non authentifié ;
+ les utilisateurs et invités se voient alors attribué un id
+ utilisateur spécifique qui permettra de se connecter et
+ d'accéder à certaines ressources.</dd>
+
+ <dt>RequireBasicAuth On|Off (par défaut Off)</dt>
+ <dd>Cette option permet de définir si l'authentification
+ basique est requise avant de transmettre la requête au
fournisseur d'autorisation. Dans l'affirmative, le fournisseur
- d'autorisation ne sera invoqué qu'en présence d'un id
- utilisateur et d'un mot de passe ; si ces deux éléments ne sont
- pas présents, un code d'erreur 401 sera renvoyé</dd>
+ d'autorisation ne sera invoqué qu'en présence d'un id
+ utilisateur et d'un mot de passe ; si ces deux éléments ne sont
+ pas présents, un code d'erreur 401 sera renvoyé</dd>
- <dt>UserExpr <em>expr</em> (pas de valeur par défaut)</dt>
+ <dt>UserExpr <em>expr</em> (pas de valeur par défaut)</dt>
<dd>Lorsque le client ne fournit pas l'authentification basique
- et si le fournisseur d'autorisation détermine l'id utilisateur,
- cette expression, évaluée après l'appel au fournisseur
- d'autorisation, permet de déterminer l'id utilisateur. Cette
- expression se conforme à la <a href="../expr.html">syntaxe
- ap_expr</a> et doit correspondre à une chaîne de caractères.
- Une utilisation courante consiste à référencer la définition
- d'une <code>Variable-<em>XXX</em></code> renvoyée par le
+ et si le fournisseur d'autorisation détermine l'id utilisateur,
+ cette expression, évaluée après l'appel au fournisseur
+ d'autorisation, permet de déterminer l'id utilisateur. Cette
+ expression se conforme à la <a href="../expr.html">syntaxe
+ ap_expr</a> et doit correspondre à une chaîne de caractères.
+ Une utilisation courante consiste à référencer la définition
+ d'une <code>Variable-<em>XXX</em></code> renvoyée par le
fournisseur d'autorisation via une option du style
<code>UserExpr "%{reqenv:<em>XXX</em>}"</code>. Si cette option
- est spécifiée, et si l'id utilisateur ne peut pas être définie
- via l'expression après une authentification réussie, la requête
- sera rejetée avec un code d'erreur 500.</dd>
+ est spécifiée, et si l'id utilisateur ne peut pas être définie
+ via l'expression après une authentification réussie, la requête
+ sera rejetée avec un code d'erreur 500.</dd>
</dl>
</dd>
<highlight language="config">
<RequireAny>
- Require method GET POST OPTIONS
- Require valid-user
+ Require method GET POST OPTIONS
+ Require valid-user
</RequireAny>
</highlight>
<modulesynopsis metafile="mod_authz_owner.xml.meta">
<name>mod_authz_owner</name>
-<description>Autorisation basée sur l'appartenance des
+<description>Autorisation basée sur l'appartenance des
fichiers</description>
<status>Extension</status>
<sourcefile>mod_authz_owner.c</sourcefile>
<identifier>authz_owner_module</identifier>
<summary>
- <p>Ce module permet de contrôler l'accès aux fichiers en comparant
- l'identifiant utilisateur ayant servi à l'authentification HTTP
- (l'identifiant utilisateur web) avec le propriétaire ou le groupe
- du fichier demandé du point de vue du système de fichiers. Le nom
- d'utilisateur et le mot de passe doivent déjà avoir été vérifiés par
+ <p>Ce module permet de contrôler l'accès aux fichiers en comparant
+ l'identifiant utilisateur ayant servi à l'authentification HTTP
+ (l'identifiant utilisateur web) avec le propriétaire ou le groupe
+ du fichier demandé du point de vue du système de fichiers. Le nom
+ d'utilisateur et le mot de passe doivent déjà avoir été vérifiés par
un module d'authentification comme <module>mod_auth_basic</module>
ou <module>mod_auth_digest</module>.
- <module>mod_authz_owner</module> reconnaît deux arguments pour la
+ <module>mod_authz_owner</module> reconnaît deux arguments pour la
directive <directive module="core">Require</directive> :
<code>file-owner</code> et <code>file-group</code> :</p>
<dl>
<dt><code>file-owner</code></dt>
- <dd>Le nom d'utilisateur web utilisé pour l'authentification doit
- correspondre au nom système du propriétaire du fichier demandé. En
- d'autres termes, si le système indique <code>jones</code> comme
- propriétaire du fichier demandé, le nom d'utilisateur fourni pour
- l'authentification HTTP doit aussi être <code>jones</code>.</dd>
+ <dd>Le nom d'utilisateur web utilisé pour l'authentification doit
+ correspondre au nom système du propriétaire du fichier demandé. En
+ d'autres termes, si le système indique <code>jones</code> comme
+ propriétaire du fichier demandé, le nom d'utilisateur fourni pour
+ l'authentification HTTP doit aussi être <code>jones</code>.</dd>
<dt><code>file-group</code></dt>
- <dd>Le nom du groupe système du fichier demandé doit être présent
- dans une base de données de groupes fournie, par exemple, par
+ <dd>Le nom du groupe système du fichier demandé doit être présent
+ dans une base de données de groupes fournie, par exemple, par
<module>mod_authz_groupfile</module> ou
<module>mod_authz_dbm</module>, et le nom d'utilisateur web fourni
- pour l'authentification doit être un membre de ce groupe. Par
- exemple, si le système indique que le groupe (système) du fichier
- demandé est <code>accounts</code>, le groupe <code>accounts</code>
- doit apparaître dans la base de données des groupes, et le nom
- d'utilisateur web utilisé pour l'authentification doit être un
+ pour l'authentification doit être un membre de ce groupe. Par
+ exemple, si le système indique que le groupe (système) du fichier
+ demandé est <code>accounts</code>, le groupe <code>accounts</code>
+ doit apparaître dans la base de données des groupes, et le nom
+ d'utilisateur web utilisé pour l'authentification doit être un
membre de ce groupe.</dd>
</dl>
<note><title>Note</title>
- <p>Si le module <module>mod_authz_owner</module> est utilisé pour
- vérifier l'autorisation d'accès à une ressource qui n'est pas
- vraiment présente dans le système de fichiers (en d'autres termes
- une ressource virtuelle), il refusera l'accès.</p>
+ <p>Si le module <module>mod_authz_owner</module> est utilisé pour
+ vérifier l'autorisation d'accès à une ressource qui n'est pas
+ vraiment présente dans le système de fichiers (en d'autres termes
+ une ressource virtuelle), il refusera l'accès.</p>
- <p>En particulier, il n'accordera jamais l'accès à une ressource
+ <p>En particulier, il n'accordera jamais l'accès à une ressource
du type <a href="../content-negotiation.html#multiviews">"Vues
- multiples" (MultiViews) d'un contenu négocié</a>.</p>
+ multiples" (MultiViews) d'un contenu négocié</a>.</p>
</note>
</summary>
<seealso><directive module="mod_authz_core">Require</directive></seealso>
<section id="examples"><title>Exemples de configuration</title>
<section id="examples.file-owner"><title>Require file-owner</title>
- <p>Considérons un serveur Web Apache fonctionnant sous un système
- multi-utilisateurs, où les fichiers de chaque utilisateur sont
- stockés dans <code>~/public_html/private</code>. En supposant
- qu'il n'existe qu'une seule base de données contenant les noms
+ <p>Considérons un serveur Web Apache fonctionnant sous un système
+ multi-utilisateurs, où les fichiers de chaque utilisateur sont
+ stockés dans <code>~/public_html/private</code>. En supposant
+ qu'il n'existe qu'une seule base de données contenant les noms
d'utilisateurs web, et que ces noms d'utilisateurs correspondent
- aux noms d'utilisateurs système qui sont les propriétaires
+ aux noms d'utilisateurs système qui sont les propriétaires
effectifs des fichiers, la configuration de l'exemple suivant
- n'accordera l'autorisation d'accès aux fichiers qu'à leur
- propriétaire. L'utilisateur <code>jones</code> ne sera pas
- autorisé à accéder aux fichiers situés dans
- <code>/home/smith/public_html/private</code>, à moins que leur
- propriétaire ne soit <code>jones</code> au lieu de
+ n'accordera l'autorisation d'accès aux fichiers qu'à leur
+ propriétaire. L'utilisateur <code>jones</code> ne sera pas
+ autorisé à accéder aux fichiers situés dans
+ <code>/home/smith/public_html/private</code>, à moins que leur
+ propriétaire ne soit <code>jones</code> au lieu de
<code>smith</code>.</p>
<highlight language="config">
</section>
<section id="examples.file-group"><title>Require file-group</title>
- <p>Considérons un système similaire à celui décrit ci-dessus, mais
- où certains utilisateurs partagent leurs fichiers de projets dans
- <code>~/public_html/project-foo</code>. Le groupe système des
+ <p>Considérons un système similaire à celui décrit ci-dessus, mais
+ où certains utilisateurs partagent leurs fichiers de projets dans
+ <code>~/public_html/project-foo</code>. Le groupe système des
fichiers est <code>foo</code>, et il n'existe qu'une seule base de
- données <directive
+ données <directive
module="mod_authz_dbm">AuthDBMGroupFile</directive> qui contient
tous les noms d'utilisateurs web et leurs groupes d'appartenance.
Ces noms d'utilisateurs web doivent alors appartenir au moins au
groupe <code>foo</code>. En d'autres termes, si <code>jones</code>
et <code>smith</code> sont tous deux membres du groupe
- <code>foo</code>, ils seront autorisés à accéder aux
- répertoires <code>project-foo</code> de chacun d'entre eux.</p>
+ <code>foo</code>, ils seront autorisés à accéder aux
+ répertoires <code>project-foo</code> de chacun d'entre eux.</p>
<highlight language="config">
<Directory "/home/*/public_html/project-foo">
<modulesynopsis metafile="mod_authz_user.xml.meta">
<name>mod_authz_user</name>
-<description>Autorisation basée sur l'utilisateur</description>
+<description>Autorisation basée sur l'utilisateur</description>
<status>Base</status>
<sourcefile>mod_authz_user.c</sourcefile>
<identifier>authz_user_module</identifier>
<summary>
- <p>Ce module permet d'accorder ou de refuser l'accès à certaines
- zones du site web aux utilisateurs authentifiés.
- <module>mod_authz_user</module> accorde l'accès si l'utilisateur
- authentifié fait partie de la liste spécifiée par une directive
+ <p>Ce module permet d'accorder ou de refuser l'accès à certaines
+ zones du site web aux utilisateurs authentifiés.
+ <module>mod_authz_user</module> accorde l'accès si l'utilisateur
+ authentifié fait partie de la liste spécifiée par une directive
<code>Require user</code>. On peut aussi utiliser la directive
- <code>Require valid-user</code> pour accorder l'accès à tous les
- utilisateurs qui ont été authentifiés avec succès.</p>
+ <code>Require valid-user</code> pour accorder l'accès à tous les
+ utilisateurs qui ont été authentifiés avec succès.</p>
</summary>
<seealso><directive module="mod_authz_core">Require</directive></seealso>
<p>Les directives <directive
module="mod_authz_core">Require</directive> d'Apache permettent,
au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
- est bien autorisé à accéder à une
+ est bien autorisé à accéder à une
ressource. mod_authz_user ajoute
les types d'autorisation <code>user</code> et <code>valid-user</code>.
</p>
<section id="requser"><title>Require user</title>
- <p>Cette directive permet de spécifier une liste d'utilisateurs
- autorisés à accéder à la ressource.</p>
+ <p>Cette directive permet de spécifier une liste d'utilisateurs
+ autorisés à accéder à la ressource.</p>
<highlight language="config">
Require user john paul george ringo
<section id="reqvaliduser"><title>Require valid-user</title>
- <p>Lorsque cette directive est définie, tout utilisateur qui s'est
- authentifié avec succès aura l'autorisation d'accès à la ressource.</p>
+ <p>Lorsque cette directive est définie, tout utilisateur qui s'est
+ authentifié avec succès aura l'autorisation d'accès à la ressource.</p>
<highlight language="config">
Require valid-user
<modulesynopsis metafile="mod_buffer.xml.meta">
<name>mod_buffer</name>
-<description>Support de la mise en tampon des requêtes</description>
+<description>Support de la mise en tampon des requêtes</description>
<status>Extension</status>
<sourcefile>mod_buffer.c</sourcefile>
<identifier>buffer_module</identifier>
-<compatibility>Disponible depuis les versions 2.3 et supérieures
+<compatibility>Disponible depuis les versions 2.3 et supérieures
d'Apache</compatibility>
<summary>
- <p>Ce module fournit la possibilité de mettre en tampon les piles
- des filtres en entrée et sortie.</p>
+ <p>Ce module fournit la possibilité de mettre en tampon les piles
+ des filtres en entrée et sortie.</p>
- <p>Dans certaines situations, les générateurs de contenu créent des
- contenus composés de petits tronçons. Afin de permettre la
- réutilisation de la mémoire, les éléments de mémoire attribués aux
- tronçons ont toujours une taille de 8k, quelle que soit la taille du
- tronçon lui-même. Lorsqu'une requête génère de nombreux petits
- tronçons, une grande quantité de mémoire peut être mobilisée par le
- traitement de la requête, et une grande quantité de données
- transmises sans nécessité. Pour y remédier, l'utilisation d'un
- tampon rassemble la réponse en un nombre de tronçons le plus petit
+ <p>Dans certaines situations, les générateurs de contenu créent des
+ contenus composés de petits tronçons. Afin de permettre la
+ réutilisation de la mémoire, les éléments de mémoire attribués aux
+ tronçons ont toujours une taille de 8k, quelle que soit la taille du
+ tronçon lui-même. Lorsqu'une requête génère de nombreux petits
+ tronçons, une grande quantité de mémoire peut être mobilisée par le
+ traitement de la requête, et une grande quantité de données
+ transmises sans nécessité. Pour y remédier, l'utilisation d'un
+ tampon rassemble la réponse en un nombre de tronçons le plus petit
possible.</p>
- <p>Lorsque httpd est utilisé comme frontal d'un générateur de
+ <p>Lorsque httpd est utilisé comme frontal d'un générateur de
contenu consommant beaucoup de ressources, la mise en tampon de la
- réponse peut permettre à ce dernier d'effectuer le traitement et de
- libérer les ressources plus ou moins rapidement, en fonction de la
- manière dont il a été conçu.</p>
+ réponse peut permettre à ce dernier d'effectuer le traitement et de
+ libérer les ressources plus ou moins rapidement, en fonction de la
+ manière dont il a été conçu.</p>
- <p>Le filtre de mise en tampon peut être ajouté aux piles des
- filtres en entrée ou en sortie, selon les besoins, à l'aide des
+ <p>Le filtre de mise en tampon peut être ajouté aux piles des
+ filtres en entrée ou en sortie, selon les besoins, à l'aide des
directives <directive module="core">SetInputFilter</directive>,
<directive module="core">SetOutputFilter</directive>, <directive
module="mod_mime">AddOutputFilter</directive> ou <directive
</example>
<note type="warning">Les filtres de mise en tampon lisent la
- requête/réponse en RAM, puis la reconditionnent sous la forme d'un
- nombre d'éléments mémoire le plus petit possible, au prix d'une
- consommation de temps CPU. Lorsque la requête/réponse est déjà
- conditionnée de manière satisfaisante, sa mise en tampon pourrait
- s'avérer encore plus lente qu'en l'absence d'utilisation de tampon.
- C'est pourquoi ces filtres doivent être utilisés avec précautions,
- et seulement si nécessaire.</note>
+ requête/réponse en RAM, puis la reconditionnent sous la forme d'un
+ nombre d'éléments mémoire le plus petit possible, au prix d'une
+ consommation de temps CPU. Lorsque la requête/réponse est déjà
+ conditionnée de manière satisfaisante, sa mise en tampon pourrait
+ s'avérer encore plus lente qu'en l'absence d'utilisation de tampon.
+ C'est pourquoi ces filtres doivent être utilisés avec précautions,
+ et seulement si nécessaire.</note>
</summary>
<seealso><a href="../filter.html">Les filtres</a></seealso>
<usage>
<p>La directive <directive
- module="mod_buffer">BufferSize</directive> permet de spécifier la
- quantité de données en octets qui sera mise en tampon avant d'être
- lue depuis ou écrite vers chaque requête. La valeur par défaut est
+ module="mod_buffer">BufferSize</directive> permet de spécifier la
+ quantité de données en octets qui sera mise en tampon avant d'être
+ lue depuis ou écrite vers chaque requête. La valeur par défaut est
128 ko.</p>
</usage>
</directivesynopsis>
<identifier>cache_disk_module</identifier>
<summary>
- <p><module>mod_cache_disk</module> implémente un gestionnaire de
+ <p><module>mod_cache_disk</module> implémente un gestionnaire de
stockage sur disque pour le module <module>mod_cache</module>.</p>
- <p>Les en-têtes et corps des réponses mises en cache sont stockés
- séparément sur le disque, dans une structure de répertoires basée
- sur le condensé md5 de l'URL mise en cache.</p>
+ <p>Les en-têtes et corps des réponses mises en cache sont stockés
+ séparément sur le disque, dans une structure de répertoires basée
+ sur le condensé md5 de l'URL mise en cache.</p>
- <p>Plusieurs réponses au contenu négocié peuvent être stockées en
- même temps, mais la mise en cache de contenus partiels n'est pas
- supportée actuellement par ce module.</p>
+ <p>Plusieurs réponses au contenu négocié peuvent être stockées en
+ même temps, mais la mise en cache de contenus partiels n'est pas
+ supportée actuellement par ce module.</p>
- <p>Les mises à jour atomiques du cache pour les fichiers d'en-tête
- et de corps peuvent être effectuées sans verrouillage en
- enregistrant les numéros d'inode et de périphérique du fichier de
- corps dans le fichier d'en-tête. Ceci implique que les entrées du
- cache déplacées manuellement dans le cache seront ignorées.</p>
+ <p>Les mises à jour atomiques du cache pour les fichiers d'en-tête
+ et de corps peuvent être effectuées sans verrouillage en
+ enregistrant les numéros d'inode et de périphérique du fichier de
+ corps dans le fichier d'en-tête. Ceci implique que les entrées du
+ cache déplacées manuellement dans le cache seront ignorées.</p>
<p>L'utilitaire <program>htcacheclean</program> permet de lister et
- de supprimer les URLs du cache, ou de maintenir le cache en deçà de
+ de supprimer les URLs du cache, ou de maintenir le cache en deçà de
certaines limites de taille et/ou de nombre d'inodes. L'utilitaire
- peut être exécuté à la demande, ou automatiquement pour assurer un
- contrôle continu des tailles des répertoires.</p>
+ peut être exécuté à la demande, ou automatiquement pour assurer un
+ contrôle continu des tailles des répertoires.</p>
<note><title>Note :</title>
- <p><module>mod_cache</module> doit être chargé avant
+ <p><module>mod_cache</module> doit être chargé avant
<module>mod_cache_disk</module> pour que ce dernier puisse
fonctionner.</p>
</note>
<note><title>Note :</title>
- <p>Lorsque la plate-forme la supporte, et si elle est activée via la
+ <p>Lorsque la plate-forme la supporte, et si elle est activée via la
directive <directive module="core">EnableSendfile</directive>,
- <module>mod_cache_disk</module> utilise la fonctionnalité sendfile
- pour servir les fichiers à partir du cache. Cependant,
+ <module>mod_cache_disk</module> utilise la fonctionnalité sendfile
+ pour servir les fichiers à partir du cache. Cependant,
<module>mod_cache_disk</module> ignore la configuration de la
directive <directive module="core">EnableSendfile</directive> dans
- un contexte de répertoire ou de fichier .htaccess, car le module ne
- dispose pas des définitions correspondantes lorsque la requête est
+ un contexte de répertoire ou de fichier .htaccess, car le module ne
+ dispose pas des définitions correspondantes lorsque la requête est
servie depuis le cache.</p>
</note>
</summary>
<directivesynopsis>
<name>CacheRoot</name>
-<description>La racine du répertoire dans lequel les fichiers du cache
-seront stockés</description>
-<syntax>CacheRoot <var>répertoire</var></syntax>
+<description>La racine du répertoire dans lequel les fichiers du cache
+seront stockés</description>
+<syntax>CacheRoot <var>répertoire</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
- <p>La directive <directive>CacheRoot</directive> permet de définir
- le nom du répertoire sur disque qui contiendra les fichiers du
- cache. Si le module <module>mod_cache_disk</module> a été chargé ou
- compilé dans le serveur Apache, cette directive <em>doit</em> être
- définie. L'absence de définition de la directive
+ <p>La directive <directive>CacheRoot</directive> permet de définir
+ le nom du répertoire sur disque qui contiendra les fichiers du
+ cache. Si le module <module>mod_cache_disk</module> a été chargé ou
+ compilé dans le serveur Apache, cette directive <em>doit</em> être
+ définie. L'absence de définition de la directive
<directive>CacheRoot</directive> provoquera une erreur de traitement
du fichier de configuration. Les directives <directive
module="mod_cache_disk">CacheDirLevels</directive> et <directive
module="mod_cache_disk">CacheDirLength</directive> permettent de
- définir la structure des sous-répertoires du répertoire racine
- spécifié.</p>
+ définir la structure des sous-répertoires du répertoire racine
+ spécifié.</p>
<highlight language="config">
CacheRoot c:/cacheroot
<directivesynopsis>
<name>CacheDirLevels</name>
-<description>Le nombre de niveaux de sous-répertoires que comportera le
+<description>Le nombre de niveaux de sous-répertoires que comportera le
cache.</description>
<syntax>CacheDirLevels <var>niveaux</var></syntax>
<default>CacheDirLevels 2</default>
<usage>
<p>La directive <directive>CacheDirLevels</directive> permet de
- définir le nombre de niveaux de sous-répertoires que comportera le
- cache. Les données du cache seront stokées au niveau correspondant
- par rapport au répertoire <directive module="mod_cache_disk"
+ définir le nombre de niveaux de sous-répertoires que comportera le
+ cache. Les données du cache seront stokées au niveau correspondant
+ par rapport au répertoire <directive module="mod_cache_disk"
>CacheRoot</directive>.</p>
<p>Une valeur haute pour <directive>CacheDirLevels</directive>
- combinée avec une valeur basse pour
- <directive>CacheDirLength</directive> générera une arborescence
- très développée, avec un petit nombre de sous-répertoires à chaque
+ combinée avec une valeur basse pour
+ <directive>CacheDirLength</directive> générera une arborescence
+ très développée, avec un petit nombre de sous-répertoires à chaque
niveau.</p>
<note>
<p>La valeur du produit <directive>CacheDirLevels</directive> *
<directive module="mod_cache_disk">CacheDirLength</directive> ne
- doit pas dépasser 20.</p>
+ doit pas dépasser 20.</p>
</note>
</usage>
<directivesynopsis>
<name>CacheDirLength</name>
-<description>Le nombre de caractères des noms des
-sous-répertoires</description>
+<description>Le nombre de caractères des noms des
+sous-répertoires</description>
<syntax>CacheDirLength <var>longueur</var></syntax>
<default>CacheDirLength 2</default>
<contextlist><context>server config</context><context>virtual host</context>
<usage>
<p>la directive <directive>CacheDirLength</directive> permet de
- définir le nombre de caractères que comportera chaque nom de
- sous-répertoire de la hiérarchie du cache. On peut l'utiliser en
+ définir le nombre de caractères que comportera chaque nom de
+ sous-répertoire de la hiérarchie du cache. On peut l'utiliser en
conjonction avec <directive>CacheDirLevels</directive> pour
- déterminer une structure approximative de la hiérarchie de
+ déterminer une structure approximative de la hiérarchie de
cache.</p>
<p>Une valeur haute pour <directive>CacheDirLength</directive>
- combinée avec une valeur basse pour
- <directive>CacheDirLevels</directive> générera une hiérarchie
- relativement peu profonde, avec un grand nombre de sous-répertoires
- à chaque niveau.</p>
+ combinée avec une valeur basse pour
+ <directive>CacheDirLevels</directive> générera une hiérarchie
+ relativement peu profonde, avec un grand nombre de sous-répertoires
+ à chaque niveau.</p>
<note>
<p>La valeur du produit <directive>CacheDirLevels</directive> *
<directive module="mod_cache_disk">CacheDirLength</directive> ne
- doit pas dépasser 20.</p>
+ doit pas dépasser 20.</p>
</note>
</usage>
<directivesynopsis>
<name>CacheMinFileSize</name>
<description>La taille minimale (en octets) d'un document pour pouvoir
-être stocké dans le cache</description>
+être stocké dans le cache</description>
<syntax>CacheMinFileSize <var>octets</var></syntax>
<default>CacheMinFileSize 1</default>
<contextlist><context>server config</context><context>virtual host</context>
<usage>
<p>La directive <directive>CacheMinFileSize</directive> permet de
- définir la taille minimale d'un document, en octets, pour que
+ définir la taille minimale d'un document, en octets, pour que
celui-ci puisse faire l'objet d'un stockage dans le cache.</p>
<highlight language="config">
<directivesynopsis>
<name>CacheMaxFileSize</name>
<description>>La taille maximale (en octets) d'un document pour pouvoir
-être stocké dans le cache</description>
+être stocké dans le cache</description>
<syntax>CacheMaxFileSize <var>octets</var></syntax>
<default>CacheMaxFileSize 1000000</default>
<contextlist><context>server config</context><context>virtual host</context>
<usage>
<p>La directive <directive>CacheMaxFileSize</directive> permet de
- définir la taille maximale d'un document, en octets, pour que
+ définir la taille maximale d'un document, en octets, pour que
celui-ci puisse faire l'objet d'un stockage dans le cache.</p>
<highlight language="config">
</directivesynopsis>
<directivesynopsis>
<name>CacheReadSize</name>
-<description>La quantité minimale (en octets) de données à lire et à
+<description>La quantité minimale (en octets) de données à lire et à
mettre en cache avant de les envoyer au client</description>
<syntax>CacheReadSize <var>octets</var></syntax>
<default>CacheReadSize 0</default>
<usage>
<p>La directive <directive>CacheReadSize</directive> permet de
- définir la quantité minimale de données, en octets, à lire depuis le
- serveur d'arrière-plan avant de les envoyer au client. Avec la
- valeur par défaut zéro, toute donnée de toutes tailles est envoyée
- au client dès qu'elle est disponible. Avec une valeur non nulle, le
- cache disque met en tampon au moins la quantité de données
- correspondante avant d'envoyer la réponse au client. Les
- performances peuvent s'en trouver améliorées lorsqu'on met en cache
+ définir la quantité minimale de données, en octets, à lire depuis le
+ serveur d'arrière-plan avant de les envoyer au client. Avec la
+ valeur par défaut zéro, toute donnée de toutes tailles est envoyée
+ au client dès qu'elle est disponible. Avec une valeur non nulle, le
+ cache disque met en tampon au moins la quantité de données
+ correspondante avant d'envoyer la réponse au client. Les
+ performances peuvent s'en trouver améliorées lorsqu'on met en cache
du contenu en provenance d'un mandataire inverse.</p>
- <p>Cette directive ne prend effet que lorsque les données sont
- enregistrées dans le cache, et non lorsque les données sont servies à
+ <p>Cette directive ne prend effet que lorsque les données sont
+ enregistrées dans le cache, et non lorsque les données sont servies à
partir du cache.</p>
<highlight language="config">
<directivesynopsis>
<name>CacheReadTime</name>
-<description>Le temps minimum (en millisecondes) qui doit s'écouler
-avant d'envoyer les données au client</description>
+<description>Le temps minimum (en millisecondes) qui doit s'écouler
+avant d'envoyer les données au client</description>
<syntax>CacheReadTime <var>millisecondes</var></syntax>
<default>CacheReadTime 0</default>
<contextlist><context>server config</context>
<usage>
<p>La directive <directive>CacheReadTime</directive> permet de
- définir le temps minimum qui doit s'écouler avant d'essayer
- d'envoyer des données au client. Pendant ce temps, les données sont
- mises en tampon avant de pouvoir être envoyées au client. Les
- performances peuvent s'en trouver améliorées lorsqu'on met en cache
+ définir le temps minimum qui doit s'écouler avant d'essayer
+ d'envoyer des données au client. Pendant ce temps, les données sont
+ mises en tampon avant de pouvoir être envoyées au client. Les
+ performances peuvent s'en trouver améliorées lorsqu'on met en cache
du contenu en provenance d'un mandataire inverse.</p>
- <p>La valeur par défaut zéro désactive cette option.</p>
+ <p>La valeur par défaut zéro désactive cette option.</p>
- <p>Cette directive ne prend effet que lorsque les données sont
- enregistrées dans le cache, et non lorsque les données sont servies à
- partir du cache. Il est recommandé d'harmoniser l'utilisation de cette
+ <p>Cette directive ne prend effet que lorsque les données sont
+ enregistrées dans le cache, et non lorsque les données sont servies à
+ partir du cache. Il est recommandé d'harmoniser l'utilisation de cette
directive avec celle de la directive <directive
module="mod_cache_disk">CacheReadSize</directive>, afin de s'assurer
que le serveur n'effectue pas une mise en tampon excessive au cas
- où les données arriveraient plus vite que prévu.</p>
+ où les données arriveraient plus vite que prévu.</p>
<highlight language="config">
CacheReadTime 1000
<modulesynopsis metafile="mod_cern_meta.xml.meta">
<name>mod_cern_meta</name>
-<description>La sémantique des métafichiers du serveur httpd du
+<description>La sémantique des métafichiers du serveur httpd du
CERN</description>
<status>Extension</status>
<sourcefile>mod_cern_meta.c</sourcefile>
<identifier>cern_meta_module</identifier>
<summary>
- <p>Il s'agit d'une émulation de la sémantique des métafichiers du
- serveur httpd du CERN. Les métafichiers sont des en-têtes HTTP
- qui peuvent s'ajouter au jeu d'en-têtes habituels pour chaque
- fichier accédé. Ils ressemblent beaucoup aux fichiers .asis
- d'Apache, et permettent d'influencer de manière rudimentaire
- l'en-tête Expires:, ainsi que d'autres curiosités. Il existe de
- nombreuses méthodes pour gérer les métainformations, mais le choix
- s'est porté sur celle-ci car il existe déjà un grand nombre
+ <p>Il s'agit d'une émulation de la sémantique des métafichiers du
+ serveur httpd du CERN. Les métafichiers sont des en-têtes HTTP
+ qui peuvent s'ajouter au jeu d'en-têtes habituels pour chaque
+ fichier accédé. Ils ressemblent beaucoup aux fichiers .asis
+ d'Apache, et permettent d'influencer de manière rudimentaire
+ l'en-tête Expires:, ainsi que d'autres curiosités. Il existe de
+ nombreuses méthodes pour gérer les métainformations, mais le choix
+ s'est porté sur celle-ci car il existe déjà un grand nombre
d'utilisateurs du CERN qui peuvent exploiter ce module.</p>
<p>Pour plus d'information, voir le document sur la <a
href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir"
- >sémantique des métafichiers du CERN</a>.</p>
+ >sémantique des métafichiers du CERN</a>.</p>
</summary>
<seealso><module>mod_headers</module></seealso>
<directivesynopsis>
<name>MetaFiles</name>
-<description>Active le traitement des métafichiers du CERN</description>
+<description>Active le traitement des métafichiers du CERN</description>
<syntax>MetaFiles on|off</syntax>
<default>MetaFiles off</default>
<contextlist><context>server config</context>
<override>Indexes</override>
<usage>
- <p>Active ou désactive le traitement des métafichiers pour certains
- répertoires.</p>
+ <p>Active ou désactive le traitement des métafichiers pour certains
+ répertoires.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>MetaDir</name>
-<description>Le nom du répertoire où trouver les fichiers de
-métainformations dans le style du CERN</description>
-<syntax>MetaDir <var>répertoire</var></syntax>
+<description>Le nom du répertoire où trouver les fichiers de
+métainformations dans le style du CERN</description>
+<syntax>MetaDir <var>répertoire</var></syntax>
<default>MetaDir .web</default>
<contextlist><context>server config</context>
<context>virtual host</context>
<override>Indexes</override>
<usage>
- <p>Spécifie le nom du répertoire dans lequel Apache pourra trouver
- les fichiers de métainformations. Ce répertoire est en général un
- sous-répertoire 'caché' du répertoire qui contient le fichier à
- accéder. Définissez cette directive à "<code>.</code>" pour
- rechercher les métafichiers dans le même répertoire que le fichier à
- accéder :</p>
+ <p>Spécifie le nom du répertoire dans lequel Apache pourra trouver
+ les fichiers de métainformations. Ce répertoire est en général un
+ sous-répertoire 'caché' du répertoire qui contient le fichier à
+ accéder. Définissez cette directive à "<code>.</code>" pour
+ rechercher les métafichiers dans le même répertoire que le fichier à
+ accéder :</p>
<highlight language="config">MetaDir .</highlight>
- <p>Ou, pour rechercher dans un sous-répertoire du répertoire
- contenant le fichier à accéder :</p>
+ <p>Ou, pour rechercher dans un sous-répertoire du répertoire
+ contenant le fichier à accéder :</p>
<highlight language="config">MetaDir .meta</highlight>
</usage>
<directivesynopsis>
<name>MetaSuffix</name>
-<description>Suffixe du fichier contenant les métainformations dans le
+<description>Suffixe du fichier contenant les métainformations dans le
style du CERN</description>
<syntax>MetaSuffix <var>suffixe</var></syntax>
<default>MetaSuffix .meta</default>
<override>Indexes</override>
<usage>
- <p>Spécifie le suffixe du fichier contenant les métainformations.
- Par exemple, si on conserve les valeurs par défaut des deux
- directives précédentes, une requête pour
+ <p>Spécifie le suffixe du fichier contenant les métainformations.
+ Par exemple, si on conserve les valeurs par défaut des deux
+ directives précédentes, une requête pour
<code>DOCUMENT_ROOT/un-rep/index.html</code> provoquera la recherche
- du métafichier
+ du métafichier
<code>DOCUMENT_ROOT/un-rep/.web/index.html.meta</code>, et utilisera
- son contenu pour générer les informations quant aux en-têtes MIME
+ son contenu pour générer les informations quant aux en-têtes MIME
additionnels.</p>
<example><title>Exemple :</title>
<modulesynopsis metafile="mod_charset_lite.xml.meta">
<name>mod_charset_lite</name>
-<description>Spécifie dans quel jeu de caractère doivent s'effectuer les
-traductions ou les réencodages</description>
+<description>Spécifie dans quel jeu de caractère doivent s'effectuer les
+traductions ou les réencodages</description>
<status>Extension</status>
<sourcefile>mod_charset_lite.c</sourcefile>
<identifier>charset_lite_module</identifier>
<summary>
<p>Le module <module>mod_charset_lite</module> permet au serveur de
- modifier le jeu de caractères des réponses avant de les envoyer aux
+ modifier le jeu de caractères des réponses avant de les envoyer aux
clients. Dans un environnement EBCDIC, Apache traduit toujours les
- contenus au protocole HTTP (par exemples les en-têtes de réponses)
+ contenus au protocole HTTP (par exemples les en-têtes de réponses)
de la page de code de la locale du processus Apache vers ISO-8859-1,
- mais pas le corps des réponses. Dans tous les environnements, on
- peut utiliser <module>mod_charset_lite</module> pour spécifier que
- les corps des réponses doivent être traduits. Par exemple, si les
- fichiers sont stockés sous forme EBCDIC,
+ mais pas le corps des réponses. Dans tous les environnements, on
+ peut utiliser <module>mod_charset_lite</module> pour spécifier que
+ les corps des réponses doivent être traduits. Par exemple, si les
+ fichiers sont stockés sous forme EBCDIC,
<module>mod_charset_lite</module> pourra les traduire en ISO-8859-1
avant de les envoyer au client.</p>
- <p>Ce module fournit quelques procédés de configuration implémentés
+ <p>Ce module fournit quelques procédés de configuration implémentés
par Apache version russe, ainsi que son module
- <code>mod_charset</code> associé.</p>
+ <code>mod_charset</code> associé.</p>
</summary>
-<section id="problems"><title>Problèmes courants</title>
+<section id="problems"><title>Problèmes courants</title>
- <section><title>Noms de jeux de caractères non valides</title>
+ <section><title>Noms de jeux de caractères non valides</title>
- <p>Les noms des jeux de caractères passés en paramètres aux
+ <p>Les noms des jeux de caractères passés en paramètres aux
directives <directive
module="mod_charset_lite">CharsetSourceEnc</directive> et
<directive module="mod_charset_lite">CharsetDefault</directive>
- doivent être reconnus par le mécanisme de traduction utilisé par
- <glossary>APR</glossary> sur le système où
- <module>mod_charset_lite</module> est utilisé. Ces noms de jeux de
- caractères ne sont pas standardisés, et sont en général différents
- des valeurs qui leur correspondent dans les en-têtes HTTP.
+ doivent être reconnus par le mécanisme de traduction utilisé par
+ <glossary>APR</glossary> sur le système où
+ <module>mod_charset_lite</module> est utilisé. Ces noms de jeux de
+ caractères ne sont pas standardisés, et sont en général différents
+ des valeurs qui leur correspondent dans les en-têtes HTTP.
Actuellement, APR ne peut utiliser que iconv(3) ; vous pouvez donc
- tester facilement vos noms de jeux de caractères en utilisant le
- programme iconv(1), de la manière suivante :</p>
+ tester facilement vos noms de jeux de caractères en utilisant le
+ programme iconv(1), de la manière suivante :</p>
<example>
iconv -f valeur-charsetsourceenc -t valeur-charsetdefault
</example>
</section>
- <section><title>Incompatibilité entre le jeu de caractères du
- contenu et les règles de traduction</title>
+ <section><title>Incompatibilité entre le jeu de caractères du
+ contenu et les règles de traduction</title>
- <p>Si les règles de traduction ne peuvent s'appliquer au contenu,
- la traduction peut échouer avec des conséquences diverses, comme
+ <p>Si les règles de traduction ne peuvent s'appliquer au contenu,
+ la traduction peut échouer avec des conséquences diverses, comme
:</p>
<ul>
- <li>Le mécanisme de traduction peut renvoyer un mauvais code de
+ <li>Le mécanisme de traduction peut renvoyer un mauvais code de
retour, et la connexion sera interrompue.</li>
- <li>Le mécanisme de traduction peut insérer silencieusement des
- caractères spéciaux (par exemple des points d'interrogation) dans
+ <li>Le mécanisme de traduction peut insérer silencieusement des
+ caractères spéciaux (par exemple des points d'interrogation) dans
le tampon de sortie lorsqu'il n'est pas en mesure de traduire le
- tampon d'entrée.</li>
+ tampon d'entrée.</li>
</ul>
</section>
</section>
<directivesynopsis>
<name>CharsetSourceEnc</name>
-<description>Jeu de caractères source des fichiers</description>
-<syntax>CharsetSourceEnc <var>jeu de caractères</var></syntax>
+<description>Jeu de caractères source des fichiers</description>
+<syntax>CharsetSourceEnc <var>jeu de caractères</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context>
<usage>
<p>La directive <directive>CharsetSourceEnc</directive>
- spécifie un jeu de caractères source pour les fichiers situés dans
- le conteneur associé.</p>
+ spécifie un jeu de caractères source pour les fichiers situés dans
+ le conteneur associé.</p>
- <p>La valeur de l'argument <var>jeu de caractères</var> doit être
- un nom de jeu de caractères valide du point de vue du support des
- jeux de caractères dans <glossary>APR</glossary>. En général, cela
- implique qu'elle doit être reconnue par iconv.</p>
+ <p>La valeur de l'argument <var>jeu de caractères</var> doit être
+ un nom de jeu de caractères valide du point de vue du support des
+ jeux de caractères dans <glossary>APR</glossary>. En général, cela
+ implique qu'elle doit être reconnue par iconv.</p>
<example><title>Exemple</title>
<highlight language="config">
</highlight>
</example>
- <p>Les noms de jeux de caractères de cet exemple sont reconnus par
- le mécanisme de traduction d'iconv sous Solaris 8.</p>
+ <p>Les noms de jeux de caractères de cet exemple sont reconnus par
+ le mécanisme de traduction d'iconv sous Solaris 8.</p>
<note>
- Spécifier le même jeu de caractères pour les deux directives
+ Spécifier le même jeu de caractères pour les deux directives
<directive module="mod_charset_lite">CharsetSourceEnc</directive>
et <directive module="mod_charset_lite">CharsetDefault</directive>
- désactive la traduction. Le jeu de caractères ne doit pas forcément
- correspondre au jeu de caractères de la réponse, mais il doit être
- valide du point de vue du système.
+ désactive la traduction. Le jeu de caractères ne doit pas forcément
+ correspondre au jeu de caractères de la réponse, mais il doit être
+ valide du point de vue du système.
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CharsetDefault</name>
-<description>Jeu de caractère vers lequel la traduction doit
+<description>Jeu de caractère vers lequel la traduction doit
s'effectuer</description>
-<syntax>CharsetDefault <var>jeu de caractères</var></syntax>
+<syntax>CharsetDefault <var>jeu de caractères</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context>
<usage>
<p>La directive <directive>CharsetDefault</directive>
- spécifie le jeu de caractères vers lequel le contenu situé dans le
- conteneur associé devra être traduit.</p>
+ spécifie le jeu de caractères vers lequel le contenu situé dans le
+ conteneur associé devra être traduit.</p>
- <p>La valeur de l'argument <var>jeu de caractères</var> doit être
- un nom de jeu de caractères valide du point de vue du support des
- jeux de caractères dans <glossary>APR</glossary>. En général, cela
- implique qu'elle doit être reconnue par iconv.</p>
+ <p>La valeur de l'argument <var>jeu de caractères</var> doit être
+ un nom de jeu de caractères valide du point de vue du support des
+ jeux de caractères dans <glossary>APR</glossary>. En général, cela
+ implique qu'elle doit être reconnue par iconv.</p>
<example><title>Exemple</title>
<highlight language="config">
</example>
<note>
- Spécifier le même jeu de caractères pour les deux directives
+ Spécifier le même jeu de caractères pour les deux directives
<directive module="mod_charset_lite">CharsetSourceEnc</directive>
et <directive module="mod_charset_lite">CharsetDefault</directive>
- désactive la traduction. Le jeu de caractères ne doit pas forcément
- correspondre au jeu de caractères de la réponse, mais il doit être
- valide du point de vue du système.
+ désactive la traduction. Le jeu de caractères ne doit pas forcément
+ correspondre au jeu de caractères de la réponse, mais il doit être
+ valide du point de vue du système.
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CharsetOptions</name>
-<description>Précise les détails de la traduction du jeu de
-caractères</description>
+<description>Précise les détails de la traduction du jeu de
+caractères</description>
<syntax>CharsetOptions <var>option</var> [<var>option</var>] ...</syntax>
<default>CharsetOptions ImplicitAdd</default>
<contextlist><context>server config</context>
<usage>
<p>La directive <directive>CharsetOptions</directive>
- précise certains détails du comportement du module
+ précise certains détails du comportement du module
<module>mod_charset_lite</module>. <var>Option</var> accepte les
valeurs suivantes :</p>
<dl>
<dt><code>ImplicitAdd | NoImplicitAdd</code></dt>
- <dd>Le mot-clé <code>ImplicitAdd</code> indique que
- <module>mod_charset_lite</module> doit insérer son filtre de
- manière implicite lorsque la configuration indique que le jeu de
- caractère du contenu doit être traduit. Si la chaîne de filtrage
- est configurée de manière explicite via la directive <directive
+ <dd>Le mot-clé <code>ImplicitAdd</code> indique que
+ <module>mod_charset_lite</module> doit insérer son filtre de
+ manière implicite lorsque la configuration indique que le jeu de
+ caractère du contenu doit être traduit. Si la chaîne de filtrage
+ est configurée de manière explicite via la directive <directive
module="mod_mime">AddOutputFilter</directive>, l'option
- <code>NoImplicitAdd</code> doit être utilisée afin que
+ <code>NoImplicitAdd</code> doit être utilisée afin que
<module>mod_charset_lite</module> n'ajoute pas son propre
filtre.</dd>
<dt><code>TranslateAllMimeTypes | NoTranslateAllMimeTypes</code></dt>
<dd>Normalement, <module>mod_charset_lite</module> n'effectuera
- une traduction qu'en présence d'un petit nombre de types MIME
+ une traduction qu'en présence d'un petit nombre de types MIME
parmi tous les types possibles. Lorsque l'option
- <code>TranslateAllMimeTypes</code> est utilisée pour une section
- de configuration donnée, la traduction est effectuée sans se
- préoccuper du type MIME.</dd>
+ <code>TranslateAllMimeTypes</code> est utilisée pour une section
+ de configuration donnée, la traduction est effectuée sans se
+ préoccuper du type MIME.</dd>
</dl>
</usage>
<modulesynopsis metafile="mod_crypto.xml.meta">
<name>mod_crypto</name>
-<description>Support du chiffrement/déchiffrement symétrique</description>
+<description>Support du chiffrement/déchiffrement symétrique</description>
<status>Extension</status>
<sourcefile>mod_crypto.c</sourcefile>
<identifier>crypto_module</identifier>
-<compatibility>Disponible à partir de la version 2.5 du serveur HTTP Apache</compatibility>
+<compatibility>Disponible à partir de la version 2.5 du serveur HTTP Apache</compatibility>
<summary>
- <p>Ce module permet de <strong>chiffrer et déchiffrer</strong> les données au
- niveau des piles de filtrage en entrée et en sortie.</p>
+ <p>Ce module permet de <strong>chiffrer et déchiffrer</strong> les données au
+ niveau des piles de filtrage en entrée et en sortie.</p>
- <p>En particulier, il permet d'effectuer un <strong>chiffrement HLS à la
- volée</strong> comme décrit dans le document <a
+ <p>En particulier, il permet d'effectuer un <strong>chiffrement HLS à la
+ volée</strong> comme décrit dans le document <a
href="http://www.ietf.org/id/draft-pantos-http-live-streaming-19.txt">draft-pantos-http-live-streaming-19</a>.</p>
- <p>Mais il peut aussi assurer la livraison sécurisée de données via un CDN
- non sécurisé aux clients qui le supportent.</p>
+ <p>Mais il peut aussi assurer la livraison sécurisée de données via un CDN
+ non sécurisé aux clients qui le supportent.</p>
- <p>Selon les besoins, on peut ajouter le filtre crypto à la pile de filtrage
- en entrée ou en sortie via les directives <directive
+ <p>Selon les besoins, on peut ajouter le filtre crypto à la pile de filtrage
+ en entrée ou en sortie via les directives <directive
module="core">SetInputFilter</directive>, <directive
module="core">SetOutputFilter</directive>, <directive
module="mod_mime">AddOutputFilter</directive> ou <directive
<seealso><a href="../filter.html">Filtres</a></seealso>
<section id="format">
- <title>Format du flux de données</title>
+ <title>Format du flux de données</title>
- <p>Le flux de données chiffrées comporte un bloc IV optionnel suivi des
- données chiffrées avec l'algorithme de chiffrement choisi. Le bloc final est
- éventuellement complété par bourrage avant d'être écrit. La taille des blocs
- est déterminée par l'algorithme de chiffrement choisi.</p>
+ <p>Le flux de données chiffrées comporte un bloc IV optionnel suivi des
+ données chiffrées avec l'algorithme de chiffrement choisi. Le bloc final est
+ éventuellement complété par bourrage avant d'être écrit. La taille des blocs
+ est déterminée par l'algorithme de chiffrement choisi.</p>
- <p>Lorsque le bloc IV est spécifié via la directive <directive
- module="mod_crypto">CryptoIV</directive>, il est utilisé, mais n'est pas
- injecté dans le flux d'entrée/sortie.</p>
+ <p>Lorsque le bloc IV est spécifié via la directive <directive
+ module="mod_crypto">CryptoIV</directive>, il est utilisé, mais n'est pas
+ injecté dans le flux d'entrée/sortie.</p>
</section>
<section id="config">
- <title>Clés et blocs IV</title>
+ <title>Clés et blocs IV</title>
<p>Les directives <directive module="mod_crypto">CryptoKey</directive> et
<directive module="mod_crypto">CryptoIV</directive> acceptent comme
- arguments des valeurs binaires qui peuvent être spécifiées comme indiqué
- ci-après. Les bits les plus significatifs de ces valeurs sont utilisés, et
- si les valeurs sont trop petites, elles sont complétées par bourrage avec
- des bits à 0 par la gauche.
+ arguments des valeurs binaires qui peuvent être spécifiées comme indiqué
+ ci-après. Les bits les plus significatifs de ces valeurs sont utilisés, et
+ si les valeurs sont trop petites, elles sont complétées par bourrage avec
+ des bits à 0 par la gauche.
</p>
<dl>
- <dt>file:</dt><dd>La valeur est lue directement depuis le fichier spécifié.</dd>
- <dt>hex:</dt><dd>Interprète l'expression en tant que valeur hexadécimale qui
- peut contenir des caractères ':' comme séparateurs.</dd>
- <dt>decimal:</dt><dd>Interprète l'expression en tant que valeur décimale.</dd>
- <dt>base64:</dt><dd>Interprète l'expression en tant que valeur codée en
+ <dt>file:</dt><dd>La valeur est lue directement depuis le fichier spécifié.</dd>
+ <dt>hex:</dt><dd>Interprète l'expression en tant que valeur hexadécimale qui
+ peut contenir des caractères ':' comme séparateurs.</dd>
+ <dt>decimal:</dt><dd>Interprète l'expression en tant que valeur décimale.</dd>
+ <dt>base64:</dt><dd>Interprète l'expression en tant que valeur codée en
base64.</dd>
- <dt>none</dt><dd>Aucune valeur n'est spécifiée.</dd>
+ <dt>none</dt><dd>Aucune valeur n'est spécifiée.</dd>
</dl>
- <p>Si le IV n'est pas spécifié, un IV aléatoire sera généré au cours du
- chiffrement et écrit comme premier bloc. Lors du déchiffrement, le premier
- bloc sera interprété en tant que IV.
+ <p>Si le IV n'est pas spécifié, un IV aléatoire sera généré au cours du
+ chiffrement et écrit comme premier bloc. Lors du déchiffrement, le premier
+ bloc sera interprété en tant que IV.
</p>
<p>A l'exception du format file:, les directives <directive
module="mod_crypto">CryptoKey</directive> et <directive
module="mod_crypto">CryptoIV</directive> supportent la <a
href="../expr.html">syntaxe des expressions</a> qui fournit plus de
- flexibilité pour définir les valeurs. Les clés et IVs peuvent ainsi être
- initialisées aléatoirement via des valeurs disponibles au niveau du serveur
+ flexibilité pour définir les valeurs. Les clés et IVs peuvent ainsi être
+ initialisées aléatoirement via des valeurs disponibles au niveau du serveur
web comme REMOTE_USER ou l'URL.
</p>
</section>
<section id="handler">
- <title>Gestionnaire de clé de chiffrement</title>
+ <title>Gestionnaire de clé de chiffrement</title>
- <p>Le gestionnaire <strong>crypto-key</strong> permet de fournir la clé aux
- clients autorisés qui le supportent sans avoir à stocker cette dernière dans
- l'arborescence du serveur web. La même <a href="../expr.html">syntaxe
- d'expression</a> peut ainsi être utilisée afin d'obtenir la clé pour les
- clients et pour le contenu chiffré.</p>
+ <p>Le gestionnaire <strong>crypto-key</strong> permet de fournir la clé aux
+ clients autorisés qui le supportent sans avoir à stocker cette dernière dans
+ l'arborescence du serveur web. La même <a href="../expr.html">syntaxe
+ d'expression</a> peut ainsi être utilisée afin d'obtenir la clé pour les
+ clients et pour le contenu chiffré.</p>
- <example><title>Gestionnaire de clé de chiffrement avec un fichier</title>
+ <example><title>Gestionnaire de clé de chiffrement avec un fichier</title>
<Location /key><br />
<indent>
SetHandler crypto-key<br />
<section id="hls">
<title>HTTP Live Streaming (HLS)</title>
- <p>Le protocole HLS supporte les flux chiffrés qui utilisent l'algorithme de
- chiffrement AES-128 et une clé correspondante. On autorise l'accès au flux
- en partageant la clé avec le client HLS en général via une connexion
- sécurisée.</p>
+ <p>Le protocole HLS supporte les flux chiffrés qui utilisent l'algorithme de
+ chiffrement AES-128 et une clé correspondante. On autorise l'accès au flux
+ en partageant la clé avec le client HLS en général via une connexion
+ sécurisée.</p>
- <p>Le IV utilisé pour le chiffrement de chaque segment de media est spécifié
- dans HLS de deux manières :</p>
+ <p>Le IV utilisé pour le chiffrement de chaque segment de media est spécifié
+ dans HLS de deux manières :</p>
<ul>
<li>
- Spécifié explicitement via un attribut IV dans le tag EXT-X-KEY sous
- la forme d'une valeur <strong>hexadécimale</strong>.
+ Spécifié explicitement via un attribut IV dans le tag EXT-X-KEY sous
+ la forme d'une valeur <strong>hexadécimale</strong>.
</li>
<li>
- Spécifié implicitement en interprétant la valeur
- <strong>décimale</strong> du tag EXT-X-MEDIA-SEQUENCE.
+ Spécifié implicitement en interprétant la valeur
+ <strong>décimale</strong> du tag EXT-X-MEDIA-SEQUENCE.
</li>
</ul>
- <p>La valeur de la séquence de media est en générale incorporée dans les
- noms de segment de média et peut être recherchée en utilisant des
- expressions rationnelles nommées comme dans l'exemple ci-dessous.
+ <p>La valeur de la séquence de media est en générale incorporée dans les
+ noms de segment de média et peut être recherchée en utilisant des
+ expressions rationnelles nommées comme dans l'exemple ci-dessous.
</p>
- <example><title>Exemple HLS - IV de la séquence de média</title>
+ <example><title>Exemple HLS - IV de la séquence de média</title>
<LocationMatch (?<SEQUENCE>[\d]+)[^\d^/]+$><br />
<indent>
SetOutputFilter ENCRYPT<br />
<directivesynopsis>
<name>CryptoDriver</name>
-<description>Nom du pilote crypto à utiliser</description>
+<description>Nom du pilote crypto à utiliser</description>
<syntax>CryptoDriver name</syntax>
<default>CryptoDriver openssl</default>
<contextlist><context>server config</context>
<usage>
<p>La directive <directive module="mod_crypto">CryptoDriver</directive>
- permet de spécifier le nom du pilote crypto à utiliser. Un pilote recommandé
- par défaut est en général défini pour chaque plateforme. Les pilotes
- supportés sont <strong>openssl</strong>, <strong>commoncrypto</strong> et
+ permet de spécifier le nom du pilote crypto à utiliser. Un pilote recommandé
+ par défaut est en général défini pour chaque plateforme. Les pilotes
+ supportés sont <strong>openssl</strong>, <strong>commoncrypto</strong> et
<strong>nss</strong>.</p>
</usage>
</directivesynopsis>
</contextlist>
<usage>
- <p>La directive <directive>CryptoCipher</directive> permet de spécifier
- l'algorithme de chiffrement à utiliser au cours des phases de chiffrement et
- de déchiffrement. L'algorithme de chiffrement par défaut est
+ <p>La directive <directive>CryptoCipher</directive> permet de spécifier
+ l'algorithme de chiffrement à utiliser au cours des phases de chiffrement et
+ de déchiffrement. L'algorithme de chiffrement par défaut est
<code>aes256</code>.</p>
- <p>C'est le pilote crypto utilisé qui détermine l'étendue du choix des algorithmes de
+ <p>C'est le pilote crypto utilisé qui détermine l'étendue du choix des algorithmes de
chiffrement parmi les valeurs possibles suivantes :</p>
<ul><li>3des192</li><li>aes128</li><li>aes192</li><li>aes256</li></ul>
</contextlist>
<usage>
- <p>La directive <directive>CryptoIV</directive> permet de spécifier le IV
- (Initialisation Vector) pour l'espace d'URL considéré. Le IV peut être lu à
- partir d'un fichier ou défini via l'<a href="../expr.html">interpréteur
- d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
- définition des clés.</p>
-
- <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
- sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
+ <p>La directive <directive>CryptoIV</directive> permet de spécifier le IV
+ (Initialisation Vector) pour l'espace d'URL considéré. Le IV peut être lu à
+ partir d'un fichier ou défini via l'<a href="../expr.html">interpréteur
+ d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
+ définition des clés.</p>
+
+ <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
+ sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
suivants :</p>
<ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul>
- <p>La valeur 'none' désactive la définition du IV. Dans ce cas, un IV
- aléatoire sera généré durant le chiffrement et inséré en tant que premier
- bloc ; au cours du déchiffrement, le premier bloc sera interprété comme bloc
+ <p>La valeur 'none' désactive la définition du IV. Dans ce cas, un IV
+ aléatoire sera généré durant le chiffrement et inséré en tant que premier
+ bloc ; au cours du déchiffrement, le premier bloc sera interprété comme bloc
IV.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CryptoKey</name>
-<description>Clé que le filtre crypto doit utiliser</description>
+<description>Clé que le filtre crypto doit utiliser</description>
<syntax>CryptoKey value</syntax>
<default>CryptoKey none</default>
<contextlist><context>server config</context>
</contextlist>
<usage>
- <p>La directive <directive>CryptoKey</directive> permet de spécifier la clé
- de chiffrement/déchiffrement pour l'espace d'URL considéré. La clé peut être
- lue depuis un fichier ou défini via l'<a href="../expr.html">interpréteur
- d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
- définition des clés.</p>
-
- <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
- sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
+ <p>La directive <directive>CryptoKey</directive> permet de spécifier la clé
+ de chiffrement/déchiffrement pour l'espace d'URL considéré. La clé peut être
+ lue depuis un fichier ou défini via l'<a href="../expr.html">interpréteur
+ d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
+ définition des clés.</p>
+
+ <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
+ sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
suivants :</p>
<ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul>
- <p>La valeur 'none' désactive la clé. Toute requête pour obtenir sans clé un fichier
- via les filtres ENCRYPT ou DECRYPT se soldera alors par un échec. </p>
+ <p>La valeur 'none' désactive la clé. Toute requête pour obtenir sans clé un fichier
+ via les filtres ENCRYPT ou DECRYPT se soldera alors par un échec. </p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CryptoSize</name>
-<description>Taille maximale en octets du tampon utilisé par le filtre crypto</description>
+<description>Taille maximale en octets du tampon utilisé par le filtre crypto</description>
<syntax>CryptoSize integer</syntax>
<default>CryptoSize 131072</default>
<contextlist><context>server config</context>
<usage>
<p>La directive <directive module="mod_crypto">CryptoSize</directive> permet
- de spécifier la quantité de données en octets qui sera mise en tampon pour
- chaque requête avant d'être chiffrée ou déchiffrée. La valeur par défaut est
+ de spécifier la quantité de données en octets qui sera mise en tampon pour
+ chaque requête avant d'être chiffrée ou déchiffrée. La valeur par défaut est
128 Ko.</p>
</usage>
</directivesynopsis>
<modulesynopsis metafile="mod_data.xml.meta">
<name>mod_data</name>
-<description>Convertit un corps de réponse en URL de type données RFC2397</description>
+<description>Convertit un corps de réponse en URL de type données RFC2397</description>
<status>Extension</status>
<sourcefile>mod_data.c</sourcefile>
<identifier>data_module</identifier>
<compatibility>Disponible depuis la version 2.3 du serveur HTTP Apache</compatibility>
<summary>
- <p>Ce module permet de convertir une réponse en <a
- href="http://tools.ietf.org/html/rfc2397">URL de type données
+ <p>Ce module permet de convertir une réponse en <a
+ href="http://tools.ietf.org/html/rfc2397">URL de type données
RFC2397</a>.
</p>
- <p>Les URLs de type données peuvent être incluses en ligne dans les
+ <p>Les URLs de type données peuvent être incluses en ligne dans les
pages web via le module <module>mod_include</module> par exemple,
- afin d'éviter aux clients d'avoir à effectuer des connexions
- séparées pour éventuellement extraire un grand nombre de petites
- images. Les URLs de type données peuvent aussi être incluses dans
- des pages générées par langages de scripting tels que PHP.</p>
+ afin d'éviter aux clients d'avoir à effectuer des connexions
+ séparées pour éventuellement extraire un grand nombre de petites
+ images. Les URLs de type données peuvent aussi être incluses dans
+ des pages générées par langages de scripting tels que PHP.</p>
- <example><title>Un exemple d'URL de type données</title>
+ <example><title>Un exemple d'URL de type données</title>
data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw<br />
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz<br />
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp<br />
hhx4dbgYKAAA7<br />
</example>
- <p>Le filtre n'accepte aucun paramètre, et peut être ajouté à la
+ <p>Le filtre n'accepte aucun paramètre, et peut être ajouté à la
pile des filtres via la directive <directive
module="core">SetOutputFilter</directive>, ou toute autre directive
- supportée par le module <module>mod_filter</module>.</p>
+ supportée par le module <module>mod_filter</module>.</p>
<example><title>Configuration du filtre</title>
<highlight language="config">
<modulesynopsis metafile="mod_dav_lock.xml.meta">
<name>mod_dav_lock</name>
-<description>Module de verrouillage générique pour
+<description>Module de verrouillage générique pour
<module>mod_dav</module></description>
<status>Extension</status>
<sourcefile>mod_dav_lock.c</sourcefile>
<identifier>dav_lock_module</identifier>
<summary>
- <p>ce module implémente une API de verrouillage générique que tout
+ <p>ce module implémente une API de verrouillage générique que tout
fournisseur support de <module>mod_dav</module> peut utiliser. Son
- activation nécessite l'utilisation de <module>mod_dav</module>. Mais
+ activation nécessite l'utilisation de <module>mod_dav</module>. Mais
sans fournisseur support pour l'utiliser, il n'est d'aucun service
- et ne doit pas être chargé dans le serveur. <a
+ et ne doit pas être chargé dans le serveur. <a
href="http://subversion.apache.org/">mod_dav_svn</a>, le module qui
- implémente le fournisseur subversion, est un exemple
+ implémente le fournisseur subversion, est un exemple
de module de support qui utilise effectivement
<module>mod_dav_lock</module>.</p>
<p>Notez que <module>mod_dav_fs</module> n'a <em>pas</em> besoin de
- ce module de verrouillage générique, car il utilise sa propre
- version plus spécifique.</p>
+ ce module de verrouillage générique, car il utilise sa propre
+ version plus spécifique.</p>
<p>Pour que <module>mod_dav_lock</module> puisse fonctionner, il
- vous suffit de spécifier le chemin de la base de données des verrous
- à l'aide de la directive <directive
- module="mod_dav_lock">DavGenericLockDB</directive> décrite
+ vous suffit de spécifier le chemin de la base de données des verrous
+ à l'aide de la directive <directive
+ module="mod_dav_lock">DavGenericLockDB</directive> décrite
ci-dessous.</p>
- <note><title>Note du développeur</title>
- <p>Pour déterminer le pointeur de la fonction du fournisseur de
+ <note><title>Note du développeur</title>
+ <p>Pour déterminer le pointeur de la fonction du fournisseur de
verrouillage, vous devez utiliser l'API
<code>ap_lookup_provider</code> avec les arguments
<code>dav-lock</code>, <code>generic</code> et <code>0</code>.</p>
<directivesynopsis>
<name>DavGenericLockDB</name>
-<description>Chemin de la base de données des verrous DAV</description>
+<description>Chemin de la base de données des verrous DAV</description>
<syntax>DavGenericLockDB <var>chemin fichier</var></syntax>
<contextlist><context>server config</context><context>virtual
host</context>
</contextlist>
<usage>
- <p>La directive <directive>DavLockDB</directive> spécifie
- le chemin complet de la base de données des verrous, sans extension.
- Si le chemin n'est pas absolu, il sera considéré comme relatif au
- répertoire défini par la directive <directive
- module="core">ServerRoot</directive>. L'implémentation de
- <module>mod_dav_lock</module> utilise une base de données SDBM pour
+ <p>La directive <directive>DavLockDB</directive> spécifie
+ le chemin complet de la base de données des verrous, sans extension.
+ Si le chemin n'est pas absolu, il sera considéré comme relatif au
+ répertoire défini par la directive <directive
+ module="core">ServerRoot</directive>. L'implémentation de
+ <module>mod_dav_lock</module> utilise une base de données SDBM pour
surveiller les verrous utilisateurs.</p>
<example><title>Exemple</title>
</highlight>
</example>
- <p>Les utilisateur et groupe sous lesquels Apache s'exécute et qui
- sont respectivement définis par les directives <directive
+ <p>Les utilisateur et groupe sous lesquels Apache s'exécute et qui
+ sont respectivement définis par les directives <directive
module="mod_unixd">User</directive> et <directive
- module="mod_unixd">Group</directive> doivent pouvoir écrire dans le
- répertoire qui contient le fichier de la base de données des
- verrous. Pour des raisons de sécurité, il est recommandé de créer un
- répertoire dédié à la base de données des verrous, plutôt que de
- modifier les permissions d'un répertoire existant. Dans l'exemple
- ci-dessus, Apache va créer des fichiers dans le répertoire
- <code>var/</code>, lui-même sous-répertoire du répertoire défini par
+ module="mod_unixd">Group</directive> doivent pouvoir écrire dans le
+ répertoire qui contient le fichier de la base de données des
+ verrous. Pour des raisons de sécurité, il est recommandé de créer un
+ répertoire dédié à la base de données des verrous, plutôt que de
+ modifier les permissions d'un répertoire existant. Dans l'exemple
+ ci-dessus, Apache va créer des fichiers dans le répertoire
+ <code>var/</code>, lui-même sous-répertoire du répertoire défini par
la directive <directive
module="core">ServerRoot</directive>, avec le nom de base
<code>DavLock</code> suivi d'une extension choisie par le
<modulesynopsis metafile="mod_dumpio.xml.meta">
<name>mod_dumpio</name>
-<description>Enregistre toutes les entrées/sorties dans le journal des
-erreurs de la manière souhaitée.</description>
+<description>Enregistre toutes les entrées/sorties dans le journal des
+erreurs de la manière souhaitée.</description>
<status>Extension</status>
<sourcefile>mod_dumpio.c</sourcefile>
<identifier>dumpio_module</identifier>
<summary>
- <p><code>mod_dumpio</code> permet d'enregistrer toutes les entrées
- reçues par Apache et/ou toutes les sorties envoyées par ce dernier
+ <p><code>mod_dumpio</code> permet d'enregistrer toutes les entrées
+ reçues par Apache et/ou toutes les sorties envoyées par ce dernier
dans le fichier error.log.
</p>
- <p>L'enregistrement des données s'effectue juste après
- le décodage SSL (pour les entrées), et juste avant le codage SSL (pour les
- sorties). Comme on peut s'y attendre, tout ceci peut représenter un
- volume important de données, et ne doit être
- utilisé qu'à des fins de débogage.</p>
+ <p>L'enregistrement des données s'effectue juste après
+ le décodage SSL (pour les entrées), et juste avant le codage SSL (pour les
+ sorties). Comme on peut s'y attendre, tout ceci peut représenter un
+ volume important de données, et ne doit être
+ utilisé qu'à des fins de débogage.</p>
</summary>
<section id="enable">
<title>Activation du support dumpio</title>
- <p>Pour activer le module, ce dernier doit être compilé et chargé
- par l'intermédiaire de la configuration de votre instance d'Apache.
- La journalisation peut ensuite être activée ou
- désactivée séparément
- pour les entrées et sorties à l'aide des directives ci-dessous. En
- outre, <module>mod_dumpio</module> doit être configuré à <directive
+ <p>Pour activer le module, ce dernier doit être compilé et chargé
+ par l'intermédiaire de la configuration de votre instance d'Apache.
+ La journalisation peut ensuite être activée ou
+ désactivée séparément
+ pour les entrées et sorties à l'aide des directives ci-dessous. En
+ outre, <module>mod_dumpio</module> doit être configuré à <directive
module="core">LogLevel</directive> <code>trace7</code> :</p>
<highlight language="config">
LogLevel dumpio:trace7
<directivesynopsis>
<name>DumpIOInput</name>
-<description>Enregistre toutes les entrées dans le journal des
+<description>Enregistre toutes les entrées dans le journal des
erreurs</description>
<syntax>DumpIOInput On|Off</syntax>
<default>DumpIOInput Off</default>
<contextlist><context>server config</context></contextlist>
<usage>
- <p>Active la journalisation de toutes les entrées.</p>
+ <p>Active la journalisation de toutes les entrées.</p>
<example><title>Exemple</title>
<highlight language="config">
<modulesynopsis metafile="mod_echo.xml.meta">
<name>mod_echo</name>
-<description>Un simple serveur d'écho pour illustrer les modules de
+<description>Un simple serveur d'écho pour illustrer les modules de
protocole</description>
<status>Experimental</status>
<sourcefile>mod_echo.c</sourcefile>
<summary>
<p>Ce module est un module de protocole exemple permettant d'en
- illustrer le concept. Il fournit un simple serveur d'écho. Envoyez
+ illustrer le concept. Il fournit un simple serveur d'écho. Envoyez
lui une phrase par telnet, et il vous la renverra.</p>
</summary>
<directivesynopsis>
<name>ProtocolEcho</name>
-<description>Active ou désactive le serveur d'écho</description>
+<description>Active ou désactive le serveur d'écho</description>
<syntax>ProtocolEcho On|Off</syntax>
<default>ProtocolEcho Off</default>
<contextlist><context>server config</context>
<usage>
<p>La directive <directive>ProtocolEcho</directive> permet d'activer
- ou de désactiver le serveur d'écho.</p>
+ ou de désactiver le serveur d'écho.</p>
<example><title>Exemple</title>
<highlight language="config">
<sourcefile>mod_env.c</sourcefile>
<identifier>env_module</identifier>
<summary>
- <p>Ce module permet de contrôler les variables d'environnement
- internes utilisées par divers modules du serveur HTTP Apache. Ces
+ <p>Ce module permet de contrôler les variables d'environnement
+ internes utilisées par divers modules du serveur HTTP Apache. Ces
variables sont aussi accessibles aux scripts CGI en tant que
- variables d'environnement système natives, et disponibles dans les
+ variables d'environnement système natives, et disponibles dans les
pages SSI. Les variables d'environnement peuvent
- être transmises depuis le shell qui a lancé le processus
- <program>httpd</program>. Elles peuvent également être définies ou
- supprimées au cours du processus de configuration.</p>
+ être transmises depuis le shell qui a lancé le processus
+ <program>httpd</program>. Elles peuvent également être définies ou
+ supprimées au cours du processus de configuration.</p>
</summary>
<seealso><a href="../env.html">Variables d'environnement</a></seealso>
<seealso><directive module="mod_setenvif">SetEnvIf</directive></seealso>
<override>FileInfo</override>
<usage>
- <p>Cette directive permet de spécifier quelles variables
- d'environnement système natives doivent être disponibles en tant que
+ <p>Cette directive permet de spécifier quelles variables
+ d'environnement système natives doivent être disponibles en tant que
variables d'environnement internes pour les modules du serveur HTTP
- Apache, et propagées vers les scripts CGI et les pages SSI. Leurs
- valeurs sont issues de l'environnement natif de l'OS associé au
- shell qui a invoqué le processus <program>httpd</program>.</p>
+ Apache, et propagées vers les scripts CGI et les pages SSI. Leurs
+ valeurs sont issues de l'environnement natif de l'OS associé au
+ shell qui a invoqué le processus <program>httpd</program>.</p>
<example><title>Exemple</title>
<highlight language="config">
<directivesynopsis>
<name>SetEnv</name>
-<description>Définit des variables d'environnement</description>
+<description>Définit des variables d'environnement</description>
<syntax>SetEnv <var>var-env</var> [<var>valeur</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
<usage>
- <p>Définit une variable d'environnement interne, cette dernière étant
+ <p>Définit une variable d'environnement interne, cette dernière étant
ensuite disponible pour les modules du serveur HTTP Apache et
transmise aux scripts CGI et aux pages SSI.</p>
</example>
<p>Si l'argument <var>valeur</var> est absent, la variable est
- définie à la valeur d'une chaîne vide.</p>
+ définie à la valeur d'une chaîne vide.</p>
- <note><p>Les variables d'environnement internes définies par cette
- directive le sont <em>après</em> l'exécution de la plupart des
- directives du traitement initial des requêtes, comme les contrôles
- d'accès et la mise en correspondance des URIs avec les noms de
- fichiers. Si la variable d'environnement est sensée intervenir au
+ <note><p>Les variables d'environnement internes définies par cette
+ directive le sont <em>après</em> l'exécution de la plupart des
+ directives du traitement initial des requêtes, comme les contrôles
+ d'accès et la mise en correspondance des URIs avec les noms de
+ fichiers. Si la variable d'environnement est sensée intervenir au
cours de cette phase initiale du traitement, par exemple pour la
directive <directive module="mod_rewrite">RewriteRule</directive>,
- vous devez plutôt utiliser la directive <directive
- module="mod_setenvif">SetEnvIf</directive> pour définir cette
+ vous devez plutôt utiliser la directive <directive
+ module="mod_setenvif">SetEnvIf</directive> pour définir cette
variable.</p>
</note>
<modulesynopsis metafile="mod_expires.xml.meta">
<name>mod_expires</name>
-<description>Génération des en-têtes HTTP <code>Expires</code> et
-<code>Cache-Control</code> en fonction de critères spécifiés par
+<description>Génération des en-têtes HTTP <code>Expires</code> et
+<code>Cache-Control</code> en fonction de critères spécifiés par
l'utilisateur</description>
<status>Extension</status>
<sourcefile>mod_expires.c</sourcefile>
<identifier>expires_module</identifier>
<summary>
- <p>Ce module permet de contrôler la définition de l'en-tête HTTP
+ <p>Ce module permet de contrôler la définition de l'en-tête HTTP
<code>Expires</code> et la directive <code>max-age</code> de
- l'en-tête HTTP <code>Cache-Control</code> dans les réponses du
- serveur. La date d'expiration peut être définie soit par rapport à
- la date de dernière modification du fichier source, soit
- par rapport à l'heure d'accès du client.</p>
-
- <p>Ces en-têtes HTTP permettent d'informer le client quant à la
- validité et à la persistence du document. S'il est présent dans le
- cache, et tant qu'il n'est pas arrivé à expiration, le document sera
- servi à partir de ce dernier, plutôt qu'à partir du document source.
- Après expiration, la copie du document dans le cache sera considérée
- comme "expirée" et donc invalide, et une nouvelle copie devra être
- obtenue à partir du document source.</p>
-
- <p>Pour modifier les directives de contrôle du cache autres
+ l'en-tête HTTP <code>Cache-Control</code> dans les réponses du
+ serveur. La date d'expiration peut être définie soit par rapport à
+ la date de dernière modification du fichier source, soit
+ par rapport à l'heure d'accès du client.</p>
+
+ <p>Ces en-têtes HTTP permettent d'informer le client quant à la
+ validité et à la persistence du document. S'il est présent dans le
+ cache, et tant qu'il n'est pas arrivé à expiration, le document sera
+ servi à partir de ce dernier, plutôt qu'à partir du document source.
+ Après expiration, la copie du document dans le cache sera considérée
+ comme "expirée" et donc invalide, et une nouvelle copie devra être
+ obtenue à partir du document source.</p>
+
+ <p>Pour modifier les directives de contrôle du cache autres
que <code>max-age</code> (voir la <a
href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">RFC
2616 section 14.9</a>), vous pouvez utiliser la directive <directive
module="mod_headers">Header</directive>.</p>
- <p>Lorsque l'en-tête <code>Expires</code> est déjà présent dans la
- réponse générée par le serveur, par exemple s'il a été créé par un
+ <p>Lorsque l'en-tête <code>Expires</code> est déjà présent dans la
+ réponse générée par le serveur, par exemple s'il a été créé par un
script CGI ou un serveur original via un serveur mandataire, ce
- module n'ajoute aucun en-tête <code>Expires</code> ou
+ module n'ajoute aucun en-tête <code>Expires</code> ou
<code>Cache-Control</code>.</p>
</summary>
-<section id="AltSyn"><title>Autre syntaxe de définition de
+<section id="AltSyn"><title>Autre syntaxe de définition de
l'intervalle</title>
<p>Pour une syntaxe plus lisible, on peut aussi utiliser les
directives <directive
ExpiresByType type/encoding "<var>base</var> [plus <var>num</var> <var>type</var>] [<var>num</var> <var>type</var>] ..."
</highlight>
- <p>où <var>base</var> peut être :</p>
+ <p>où <var>base</var> peut être :</p>
<ul>
<li><code>access</code></li>
- <li><code>now</code> (équivalent à
+ <li><code>now</code> (équivalent à
'<code>access</code>')</li>
<li><code>modification</code></li>
</ul>
- <p>Le mot-clé <code>plus</code> est optionnel. <var>num</var> doit
- correspondre à une valeur entière [compatible avec
- <code>atoi()</code>], et <var>type</var> peut être choisi parmi :</p>
+ <p>Le mot-clé <code>plus</code> est optionnel. <var>num</var> doit
+ correspondre à une valeur entière [compatible avec
+ <code>atoi()</code>], et <var>type</var> peut être choisi parmi :</p>
<ul>
<li><code>years</code></li>
<li><code>seconds</code></li>
</ul>
- <p>Par exemple, pour faire expirer par défaut les documents 1 mois
- après leur accès, on peut utiliser une des directives suivantes :</p>
+ <p>Par exemple, pour faire expirer par défaut les documents 1 mois
+ après leur accès, on peut utiliser une des directives suivantes :</p>
<highlight language="config">
ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
</highlight>
- <p>La date d'expiration peut être définie plus précisément en
+ <p>La date d'expiration peut être définie plus précisément en
ajoutant plusieurs clauses '<var>num</var> <var>type</var>' :</p>
<highlight language="config">
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
</highlight>
- <p>Notez que si vous utilisez une configuration basée sur la date de
- modification, l'en-tête Expires ne sera pas ajouté à un contenu qui
+ <p>Notez que si vous utilisez une configuration basée sur la date de
+ modification, l'en-tête Expires ne sera pas ajouté à un contenu qui
ne provient pas directement d'un fichier sur disque ; et ceci tout
- simplement parce que ce type de contenu ne possède pas de date de
+ simplement parce que ce type de contenu ne possède pas de date de
modification.</p>
</section>
<directivesynopsis>
<name>ExpiresActive</name>
-<description>Active la génération d'en-têtes
+<description>Active la génération d'en-têtes
<code>Expires</code></description>
<syntax>ExpiresActive On|Off</syntax>
<default>ExpiresActive Off</default>
<override>Indexes</override>
<usage>
- <p>Cette directive permet d'activer ou de désactiver la génération
- des en-têtes <code>Expires</code> et <code>Cache-Control</code> pour
- les documents concernés ; en d'autres termes, si cette directive se
+ <p>Cette directive permet d'activer ou de désactiver la génération
+ des en-têtes <code>Expires</code> et <code>Cache-Control</code> pour
+ les documents concernés ; en d'autres termes, si cette directive se
trouve dans un fichier <code>.htaccess</code>, par exemple, elle ne
- s'applique qu'aux documents générés à partir du répertoire
- considéré. Si elle est définie à <code>Off</code>, les en-têtes ne
- seront générés pour aucun document du domaine considéré (sauf
- surcharge de la configuration à un niveau inférieur, comme un
+ s'applique qu'aux documents générés à partir du répertoire
+ considéré. Si elle est définie à <code>Off</code>, les en-têtes ne
+ seront générés pour aucun document du domaine considéré (sauf
+ surcharge de la configuration à un niveau inférieur, comme un
fichier <code>.htaccess</code> qui l'emporterait sur le fichier de
- configuration du serveur). Si elle est définie à <code>On</code>,
- les en-têtes seront ajoutés aux documents servis en fonction des
- critères définis par les directives <directive
+ configuration du serveur). Si elle est définie à <code>On</code>,
+ les en-têtes seront ajoutés aux documents servis en fonction des
+ critères définis par les directives <directive
module="mod_expires">ExpiresByType</directive> et <directive
module="mod_expires">ExpiresDefault</directive> (<em>voir plus
loin</em>).</p>
- <p>Notez que cette directive ne permet pas de garantir qu'un en-tête
- <code>Expires</code> ou <code>Cache-Control</code> sera généré. Si
- les critères ne sont pas respectés, aucun en-tête ne sera généré, et
- la directive produira le même effet que si elle n'avait pas été
- définie.</p>
+ <p>Notez que cette directive ne permet pas de garantir qu'un en-tête
+ <code>Expires</code> ou <code>Cache-Control</code> sera généré. Si
+ les critères ne sont pas respectés, aucun en-tête ne sera généré, et
+ la directive produira le même effet que si elle n'avait pas été
+ définie.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ExpiresByType</name>
-<description>Définition de la valeur de l'en-tête <code>Expires</code>
+<description>Définition de la valeur de l'en-tête <code>Expires</code>
en fonction du type MIME</description>
<syntax>ExpiresByType <var>type MIME</var>
<var><code>secondes</var></syntax>
<override>Indexes</override>
<usage>
- <p>Cette directive permet de définir la valeur de l'en-tête
+ <p>Cette directive permet de définir la valeur de l'en-tête
<code>Expires</code> et de la directive <code>max-age</code> de
- l'en-tête <code>Cache-Control</code> générés pour les documents du
- type MIME spécifié (par exemple, <code>text/html</code>). Le second
- argument définit le nombre de secondes qui seront ajoutées à un
+ l'en-tête <code>Cache-Control</code> générés pour les documents du
+ type MIME spécifié (par exemple, <code>text/html</code>). Le second
+ argument définit le nombre de secondes qui seront ajoutées à un
temps de base pour calculer la date d'expiration.
<code>Cache-Control: max-age</code> se calcule en soustrayant la
- date de la requête de la date d'expiration et s'exprime en
+ date de la requête de la date d'expiration et s'exprime en
secondes.</p>
- <p>Le champ <code><var><code></var></code> permet de spécifier
- quel temps doit être utilisé comme temps de base; <code>M</code>
+ <p>Le champ <code><var><code></var></code> permet de spécifier
+ quel temps doit être utilisé comme temps de base; <code>M</code>
signifie que c'est la date
- de dernière modification du fichier qui doit être utilisée comme
+ de dernière modification du fichier qui doit être utilisée comme
temps de base, alors que <code>A</code> signifie que c'est le moment
- où le client a accédé au document qui doit être utilisé comme temps
+ où le client a accédé au document qui doit être utilisé comme temps
de base.</p>
- <p>La différence d'effet est subtile. Si on utilise <code>M</code>,
+ <p>La différence d'effet est subtile. Si on utilise <code>M</code>,
toutes les copies existantes du document dans tous les caches
- expireront au même moment, ce qui peut convenir par exemple pour une
- notice hebdomadaire qui correspond toujours à la même URL. Si on
- utilise <code>A</code>, la date d'expiration sera différente pour
+ expireront au même moment, ce qui peut convenir par exemple pour une
+ notice hebdomadaire qui correspond toujours à la même URL. Si on
+ utilise <code>A</code>, la date d'expiration sera différente pour
chaque client, ce qui peut convenir pour des fichiers d'images qui
- ne changent pas très souvent, et en particulier pour un ensemble de
- documents en relation qui se réfèrent tous aux mêmes images (ces
- images sont alors accédées de manière répétitive dans un intervalle
+ ne changent pas très souvent, et en particulier pour un ensemble de
+ documents en relation qui se réfèrent tous aux mêmes images (ces
+ images sont alors accédées de manière répétitive dans un intervalle
de temps assez court).</p>
<example><title>Exemple :</title>
<highlight language="config">
-# active la génération des en-têtes Expires
+# active la génération des en-têtes Expires
ExpiresActive On
# les images GIF expirent au bout d'un mois dans le cache du
# client
ExpiresByType image/gif A2592000
-# les documents HTML restent valables une semaine après leur date
-# de dernière modification
+# les documents HTML restent valables une semaine après leur date
+# de dernière modification
ExpiresByType text/html M604800
</highlight>
</example>
<p>Notez que cette directive ne produit d'effet que si
- <code>ExpiresActive On</code> a été spécifié. Elle l'emporte, mais
- <em>seulement</em> pour le type MIME spécifié, sur toute date
- d'expiration définie par la directive <directive
+ <code>ExpiresActive On</code> a été spécifié. Elle l'emporte, mais
+ <em>seulement</em> pour le type MIME spécifié, sur toute date
+ d'expiration définie par la directive <directive
module="mod_expires">ExpiresDefault</directive>.</p>
- <p>Vous pouvez aussi définir le mode de calcul de la date
+ <p>Vous pouvez aussi définir le mode de calcul de la date
d'expiration en utilisant une <a href="#AltSyn">syntaxe
- alternative</a>, comme décrit plus haut dans ce document.</p>
+ alternative</a>, comme décrit plus haut dans ce document.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ExpiresDefault</name>
-<description>Mode de calcul par défaut de la date
+<description>Mode de calcul par défaut de la date
d'expiration</description>
<syntax>ExpiresDefault <var><code>secondes</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<override>Indexes</override>
<usage>
- <p>Cette directive permet de définir le mode de calcul par défaut de
- la date d'expiration pour tous les documents du domaine considéré.
- Elle peut être annulée pour certains types de documents par la
+ <p>Cette directive permet de définir le mode de calcul par défaut de
+ la date d'expiration pour tous les documents du domaine considéré.
+ Elle peut être annulée pour certains types de documents par la
directive <directive
module="mod_expires">ExpiresByType</directive>. Voir la description
- de cette dernière directive pour plus de détails à propos de la
+ de cette dernière directive pour plus de détails à propos de la
syntaxe de l'argument, ainsi que la description de la <a
href="#AltSyn">syntaxe alternative</a>.</p>
</usage>
<modulesynopsis metafile="mod_file_cache.xml.meta">
<name>mod_file_cache</name>
-<description>Mise en cache mémoire d'une liste statique de
+<description>Mise en cache mémoire d'une liste statique de
fichiers</description>
<status>Experimental</status>
<sourcefile>mod_file_cache.c</sourcefile>
<summary>
<note type="warning">
- Ce module doit être utilisé avec précautions. Il est recommandé de
+ Ce module doit être utilisé avec précautions. Il est recommandé de
lire attentivement ce document, car une mauvaise utilisation de
- <module>mod_file_cache</module> peut facilement conduire à la
- création d'un site inopérant.
+ <module>mod_file_cache</module> peut facilement conduire à la
+ création d'un site inopérant.
</note>
- <p>La mise en cache de fichiers souvent demandés mais rarement
- modifiés est une technique qui peut réduire la charge du
+ <p>La mise en cache de fichiers souvent demandés mais rarement
+ modifiés est une technique qui peut réduire la charge du
serveur. <module>mod_file_cache</module> met en oeuvre deux
techniques de mise en cache de fichiers <em>statiques</em>
- fréquemment demandés. Des directives de configuration vous
- permettent d'indiquer à <module>mod_file_cache</module> soit
- d'ouvrir et de charger une image en mémoire d'un fichier avec
- <code>mmap()</code>, soit de pré-ouvrir un fichier et de maintenir en
+ fréquemment demandés. Des directives de configuration vous
+ permettent d'indiquer à <module>mod_file_cache</module> soit
+ d'ouvrir et de charger une image en mémoire d'un fichier avec
+ <code>mmap()</code>, soit de pré-ouvrir un fichier et de maintenir en
service le <em>gestionnaire</em> du fichier. Chacune de ces techniques
- amène à réduire la charge du serveur lors du traitement des
- requêtes concernant ces fichiers, en accomplissant une partie du
- travail nécessaire à la mise à disposition de ces fichiers (en
- particulier les opérations d'entrées/sorties sur les fichiers) au
- démarrage du serveur, plutôt qu'au cours de chaque requête.</p>
+ amène à réduire la charge du serveur lors du traitement des
+ requêtes concernant ces fichiers, en accomplissant une partie du
+ travail nécessaire à la mise à disposition de ces fichiers (en
+ particulier les opérations d'entrées/sorties sur les fichiers) au
+ démarrage du serveur, plutôt qu'au cours de chaque requête.</p>
- <p>Note : ces techniques sont inutilisables pour accélérer des
+ <p>Note : ces techniques sont inutilisables pour accélérer des
programmes CGI ou d'autres fichiers servis par des gestionnaires de
- contenu spéciaux. Elles ne peuvent être utilisées que pour des
- fichiers standards en général servis par le gestionnaire de contenu
+ contenu spéciaux. Elles ne peuvent être utilisées que pour des
+ fichiers standards en général servis par le gestionnaire de contenu
de base d'Apache.</p>
<p>Ce module est une extension et s'inspire fortement du module
<section id="using"><title>Utilisation de mod_file_cache</title>
- <p><module>mod_file_cache</module> gère la mise en cache d'une liste
- de fichiers définie de manière statique via une des directives
+ <p><module>mod_file_cache</module> gère la mise en cache d'une liste
+ de fichiers définie de manière statique via une des directives
<directive module="mod_file_cache">MMapFile</directive> ou
<directive module="mod_file_cache">CacheFile</directive> au niveau
de la configuration du serveur principal.</p>
- <p>Les deux directives ne sont pas supportées par toutes les
+ <p>Les deux directives ne sont pas supportées par toutes les
plates-formes. Par exemple, Apache pour Windows ne supporte pas
actuellement la directive <directive
module="mod_file_cache">MMapFile</directive>, alors que d'autres
plates-formes, comme AIX, supportent les deux. Vous recevrez un
message d'erreur dans le journal des erreurs du serveur si vous
- essayez d'utiliser une directive non supportée. Si vous utilisez une
- directive non supportée, le serveur démarrera, mais les fichiers ne
+ essayez d'utiliser une directive non supportée. Si vous utilisez une
+ directive non supportée, le serveur démarrera, mais les fichiers ne
seront pas mis en cache. Sur les plates-formes qui supportent les
- deux directives, vous devez faire des essais afin de déterminer
+ deux directives, vous devez faire des essais afin de déterminer
quelle directive vous convient le mieux.</p>
<section><title>Directive MMapFile</title>
<p>La directive <directive
module="mod_file_cache">MMapFile</directive> du module
- <module>mod_file_cache</module> permet de transférer en mémoire
- une liste statique de fichiers à l'aide de l'appel système
- <code>mmap()</code>. Cet appel système est disponible sur la
+ <module>mod_file_cache</module> permet de transférer en mémoire
+ une liste statique de fichiers à l'aide de l'appel système
+ <code>mmap()</code>. Cet appel système est disponible sur la
plupart des plates-formes de style Unix, mais pas sur toutes. Il
- existe parfois des limites spécifiques au système quant à la
- taille et au nombre de fichiers qui peuvent être
- <code>mmap()</code>és, et l'expérimentation est probablement la
- méthode la plus simple pour déterminer ces limites.</p>
-
- <p>Ce <code>mmap()</code>age n'est effectué qu'une seul fois au
- démarrage ou redémarrage du serveur. Ainsi, chaque fois qu'un des
- fichiers chargés en mémoire est modifié au niveau du système de
- fichiers, vous <em>devez</em> redémarrer le serveur (voir la
+ existe parfois des limites spécifiques au système quant à la
+ taille et au nombre de fichiers qui peuvent être
+ <code>mmap()</code>és, et l'expérimentation est probablement la
+ méthode la plus simple pour déterminer ces limites.</p>
+
+ <p>Ce <code>mmap()</code>age n'est effectué qu'une seul fois au
+ démarrage ou redémarrage du serveur. Ainsi, chaque fois qu'un des
+ fichiers chargés en mémoire est modifié au niveau du système de
+ fichiers, vous <em>devez</em> redémarrer le serveur (voir la
documentation sur l'<a
- href="../stopping.html">Arrêt et redémarrage</a>). Pour bien
- insister sur ce point, si des fichiers sont modifiés <em>sur
- disque</em>, et si vous ne redémarrez pas le serveur, vous allez
- finir par servir des contenus complètement obsolètes. Vous devez
- mettre à jour les fichiers en renommant l'ancienne version et en
+ href="../stopping.html">Arrêt et redémarrage</a>). Pour bien
+ insister sur ce point, si des fichiers sont modifiés <em>sur
+ disque</em>, et si vous ne redémarrez pas le serveur, vous allez
+ finir par servir des contenus complètement obsolètes. Vous devez
+ mettre à jour les fichiers en renommant l'ancienne version et en
enregistrant la nouvelle sur disque. Pour y parvenir, on peut
utiliser des outils comme <code>rdist</code> et <code>mv</code>.
La raison pour laquelle ce module ne prend pas en compte les
- modifications de fichiers réside dans le fait que cette
- vérification nécessiterait un appel à <code>stat()</code> à chaque
- accès, et en fin de compte, l'augmentation de la consommation de
+ modifications de fichiers réside dans le fait que cette
+ vérification nécessiterait un appel à <code>stat()</code> à chaque
+ accès, et en fin de compte, l'augmentation de la consommation de
ressources finirait par aller contre le but initial de
- réduire les entrées/sorties.</p>
+ réduire les entrées/sorties.</p>
</section>
<section><title>Directive CacheFile</title>
<p>La directive <directive
module="mod_file_cache">CacheFile</directive> du module
<module>mod_file_cache</module> permet d'associer un
- <em>gestionnaire</em> ou <em>descripteur de fichier</em> à chaque
- fichier énuméré dans la directive de configuration et place ces
+ <em>gestionnaire</em> ou <em>descripteur de fichier</em> à chaque
+ fichier énuméré dans la directive de configuration et place ces
gestionnaires de fichiers ouverts dans le cache. Lorsqu'un des
- fichier est demandé, le serveur sélectionne son gestionnaire dans
- le cache et le transmet à l'API <code>sendfile()</code> (ou
+ fichier est demandé, le serveur sélectionne son gestionnaire dans
+ le cache et le transmet à l'API <code>sendfile()</code> (ou
<code>TransmitFile()</code> sous Windows).</p>
<!-- XXX
<p>Insert more details about sendfile API...</p>
-->
- <p>Cette mise en cache des gestionnaire n'est effectuée qu'une
- seule fois au démarrage ou redémarrage du système. Ainsi, chaque
- fois qu'un des fichiers chargés en mémoire est modifié au niveau
- du système de fichiers, vous <em>devez</em> redémarrer le serveur
+ <p>Cette mise en cache des gestionnaire n'est effectuée qu'une
+ seule fois au démarrage ou redémarrage du système. Ainsi, chaque
+ fois qu'un des fichiers chargés en mémoire est modifié au niveau
+ du système de fichiers, vous <em>devez</em> redémarrer le serveur
(voir la documentation sur l'<a
- href="../stopping.html">Arrêt et redémarrage</a>).
+ href="../stopping.html">Arrêt et redémarrage</a>).
Pour bien
- insister sur ce point, si des fichiers sont modifiés <em>sur
- disque</em>, et si vous ne redémarrez pas le serveur, vous allez
- finir par servir des contenus complètement obsolètes. Vous devez
- mettre à jour les fichiers en renommant l'ancienne version et en
+ insister sur ce point, si des fichiers sont modifiés <em>sur
+ disque</em>, et si vous ne redémarrez pas le serveur, vous allez
+ finir par servir des contenus complètement obsolètes. Vous devez
+ mettre à jour les fichiers en renommant l'ancienne version et en
enregistrant la nouvelle sur disque. Pour y parvenir, on peut
utiliser des outils comme <code>rdist</code> et
<code>mv</code>.</p>
<note><title>Note</title>
<p>Ne cherchez pas de directive qui met tous les
- fichiers d'un répertoire en cache, de manière récursive. Pour y
- parvenir, vous pouvez vous reporter à la directive <directive
- module="core">Include</directive>, et considérer cette
+ fichiers d'un répertoire en cache, de manière récursive. Pour y
+ parvenir, vous pouvez vous reporter à la directive <directive
+ module="core">Include</directive>, et considérer cette
commande :</p>
<example>
<directivesynopsis>
<name>MMapFile</name>
-<description>Charge au démarrage une liste de fichiers en
-mémoire</description>
+<description>Charge au démarrage une liste de fichiers en
+mémoire</description>
<syntax>MMapFile <var>chemin fichier</var> [<var>chemin_fichier</var>] ...</syntax>
<contextlist><context>server config</context></contextlist>
<usage>
<p>La directive <directive>MMapFile</directive> provoque le chargement d'un
- ou plusieurs fichiers (séparés par des espaces) en mémoire au
- démarrage du serveur. Ceux-ci sont automatiquement déchargés de la
- mémoire à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont
- été modifiés sur disque, on doit au minimum envoyer un signal
+ ou plusieurs fichiers (séparés par des espaces) en mémoire au
+ démarrage du serveur. Ceux-ci sont automatiquement déchargés de la
+ mémoire à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont
+ été modifiés sur disque, on doit au minimum envoyer un signal
<code>HUP</code> ou <code>USR1</code> au serveur afin de les
re<code>mmap()</code>er.</p>
<p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
- doivent correspondre exactement au chemin du système de fichier que
- créent les gestionnaires de traduction URL-vers-nom-fichier
+ doivent correspondre exactement au chemin du système de fichier que
+ créent les gestionnaires de traduction URL-vers-nom-fichier
d'Apache. On ne peut pas comparer des inodes ou autres identifiants
- pour mettre en correspondance des chemins à l'aide de liens
- symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
- appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
+ pour mettre en correspondance des chemins à l'aide de liens
+ symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
+ appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
Il n'est pas garanti que ce module fonctionne avec des noms de
- fichiers réécrits par <module>mod_alias</module> ou
+ fichiers réécrits par <module>mod_alias</module> ou
<module>mod_rewrite</module>.</p>
<example><title>Exemple</title>
<directivesynopsis>
<name>CacheFile</name>
<description>Met en cache une liste de gestionnaires de fichiers au
-démarrage</description>
+démarrage</description>
<syntax>CacheFile <var>chemin_fichier</var> [<var>chemin fichier</var>] ...</syntax>
<contextlist><context>server config</context></contextlist>
<usage>
<p>La directive <directive>CacheFile</directive> associe
- des gestionnaires à un ou plusieurs fichiers (séparés par des
- espaces), et place ceux-ci dans le cache au démarrage du
+ des gestionnaires à un ou plusieurs fichiers (séparés par des
+ espaces), et place ceux-ci dans le cache au démarrage du
serveur. Les gestionnaires des fichiers mis en cache sont
- automatiquement fermés à l'arrêt du serveur. Lorsqu'un ou plusieurs
- fichiers ont été modifiés sur disque, le serveur doit être redémarré
+ automatiquement fermés à l'arrêt du serveur. Lorsqu'un ou plusieurs
+ fichiers ont été modifiés sur disque, le serveur doit être redémarré
afin que les modifications soient prises en compte par le cache.</p>
<p>Soyez prudent avec les arguments <var>chemin_fichier</var> : ils
- doivent correspondre exactement au chemin du système de fichier que
- créent les gestionnaires de traduction URL-vers-nom-fichier
+ doivent correspondre exactement au chemin du système de fichier que
+ créent les gestionnaires de traduction URL-vers-nom-fichier
d'Apache. On ne peut pas comparer des inodes ou autres identifiants
- pour mettre en correspondance des chemins à l'aide de liens
- symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
- appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
+ pour mettre en correspondance des chemins à l'aide de liens
+ symboliques <em>(etc...)</em>, car là encore, ceci nécessiterait un
+ appel à <code>stat()</code> supplémentaire, ce qui est inacceptable.
Il n'est pas garanti que ce module fonctionne avec des noms de
- fichiers réécrits par <module>mod_alias</module> ou
+ fichiers réécrits par <module>mod_alias</module> ou
<module>mod_rewrite</module>.</p>
<example><title>Exemple</title>
<modulesynopsis metafile="mod_firehose.xml.meta">
<name>mod_firehose</name>
-<description>Multiplexage des entrées/sorties vers un fichier ou un pipe.</description>
+<description>Multiplexage des entrées/sorties vers un fichier ou un pipe.</description>
<status>Extension</status>
<sourcefile>mod_firehose.c</sourcefile>
<identifier>firehose_module</identifier>
<summary>
- <p><code>mod_firehose</code> fournit un mécanisme permettant
- d'enregistrer les données transmises entre le serveur httpd et le
- client au niveau élémentaire de la connexion dans un fichier ou un
- pipe, de façon à ce que les données puissent être analysées ou
- rejouées ultérieurement par le serveur. Il s'apparente à un "tcpdump
+ <p><code>mod_firehose</code> fournit un mécanisme permettant
+ d'enregistrer les données transmises entre le serveur httpd et le
+ client au niveau élémentaire de la connexion dans un fichier ou un
+ pipe, de façon à ce que les données puissent être analysées ou
+ rejouées ultérieurement par le serveur. Il s'apparente à un "tcpdump
pour httpd".</p>
- <p>Les connexions sont enregistrées après décodage de la couche SSL,
- et peuvent ainsi être utilisées dans le cadre d'une réquisition
- légale.</p>
+ <p>Les connexions sont enregistrées après décodage de la couche SSL,
+ et peuvent ainsi être utilisées dans le cadre d'une réquisition
+ légale.</p>
<p>L'utilitaire <program>firehose</program> permet en retour de
- démultiplexer le flux enregistré dans des fichiers individuels pour
+ démultiplexer le flux enregistré dans des fichiers individuels pour
analyse ou rejeu via des outils tels que <code>netcat</code>.</p>
- <note><title>AVERTISSEMENT</title>Ce module ignore tout mécanisme
- invoqué au niveau de la requête pour rendre les données privées. Il
- est donc de la responsabilité de l'administrateur de s'assurer que
- les données privées ne seront pas compromises par son utilisation.
+ <note><title>AVERTISSEMENT</title>Ce module ignore tout mécanisme
+ invoqué au niveau de la requête pour rendre les données privées. Il
+ est donc de la responsabilité de l'administrateur de s'assurer que
+ les données privées ne seront pas compromises par son utilisation.
</note>
</summary>
<seealso><program>firehose</program></seealso>
<section id="enable">
- <title>Activation de la "Lance à incendie" (Firehose)</title>
+ <title>Activation de la "Lance à incendie" (Firehose)</title>
- <p>Pour activer ce module, il doit être compilé et chargé via la
+ <p>Pour activer ce module, il doit être compilé et chargé via la
configuration de votre instance httpd courante, et les directives
- ci-dessous permettent de sélectionner les données que vous souhaitez
+ ci-dessous permettent de sélectionner les données que vous souhaitez
enregistrer.</p>
- <p>Il est possible d'enregistrer les données entrantes et sortantes
- dans le même fichier, car la direction du flux est indiquée dans
+ <p>Il est possible d'enregistrer les données entrantes et sortantes
+ dans le même fichier, car la direction du flux est indiquée dans
chaque fragment.</p>
- <p>Il est possible d'écrire vers des fichiers normaux ou des listes
+ <p>Il est possible d'écrire vers des fichiers normaux ou des listes
fifos (pipes). Dans le cas des listes fifos, mod_firehose fait en
- sorte que la taille des paquets ne dépasse pas la valeur de PIPE_BUF
- afin de s'assurer que l'écriture de ces derniers s'effectue en une
+ sorte que la taille des paquets ne dépasse pas la valeur de PIPE_BUF
+ afin de s'assurer que l'écriture de ces derniers s'effectue en une
seule fois.</p>
- <p>Si une liste fifo sous forme de pipe doit être utilisée, pour que
- cette dernière soit ouverte en écriture, certaines données doivent
- en être extraites avant le démarrage de httpd. Si l'ouverture du
- pipe échoue, mod_firehose ne sera pas activé, et le serveur sera
- lancé normalement.</p>
+ <p>Si une liste fifo sous forme de pipe doit être utilisée, pour que
+ cette dernière soit ouverte en écriture, certaines données doivent
+ en être extraites avant le démarrage de httpd. Si l'ouverture du
+ pipe échoue, mod_firehose ne sera pas activé, et le serveur sera
+ lancé normalement.</p>
- <p>Par défaut, toute tentative d'écriture bloque le serveur. Si le
- serveur a été compilé avec APR version 2.0 ou supérieure, et si le
- paramètre "nonblock" a été spécifié, les écritures dans les fichiers
- seront non blocantes, et tout dépassement de tampon entraînera la
- perte des données de débogage. Dans ce cas, il est possible donner
- la priorité à l'exécution du serveur sur l'enregistrement des
- données firehose.</p>
+ <p>Par défaut, toute tentative d'écriture bloque le serveur. Si le
+ serveur a été compilé avec APR version 2.0 ou supérieure, et si le
+ paramètre "nonblock" a été spécifié, les écritures dans les fichiers
+ seront non blocantes, et tout dépassement de tampon entraînera la
+ perte des données de débogage. Dans ce cas, il est possible donner
+ la priorité à l'exécution du serveur sur l'enregistrement des
+ données firehose.</p>
</section>
<section id="format">
<title>Format du flux</title>
- <p>En général, le serveur gère plusieurs connexions simultanément,
- et de ce fait, les requêtes et les réponses doivent être
- multiplexées avant d'être écrites dans le firehose.</p>
+ <p>En général, le serveur gère plusieurs connexions simultanément,
+ et de ce fait, les requêtes et les réponses doivent être
+ multiplexées avant d'être écrites dans le firehose.</p>
- <p>Chaque fragment se présente sous la forme d'un texte en clair
- de façon à ce qu'un firehose puisse être ouvert et inspecté par un
- éditeur de texte standard. Il est aussi possible d'utiliser
- l'utilitaire <program>firehose</program> pour démultiplexer le
- firehose en requêtes ou connexions individuelles.</p>
-
- <p>La taille maximale des fragments multiplexés est définie par la
- variable PIPE_BUF. Elle correspond à la taille maximale d'un
- élément que le système peut écrire. Si la taille des fragments
- multiplexés reste en dessous de PIPE_BUF, le module garantit que les
- contenus des différents fragments ne se recouperont pas. La valeur
- de PIPE_BUF varie en fonction du système d'exploitation.</p>
+ <p>Chaque fragment se présente sous la forme d'un texte en clair
+ de façon à ce qu'un firehose puisse être ouvert et inspecté par un
+ éditeur de texte standard. Il est aussi possible d'utiliser
+ l'utilitaire <program>firehose</program> pour démultiplexer le
+ firehose en requêtes ou connexions individuelles.</p>
+
+ <p>La taille maximale des fragments multiplexés est définie par la
+ variable PIPE_BUF. Elle correspond à la taille maximale d'un
+ élément que le système peut écrire. Si la taille des fragments
+ multiplexés reste en dessous de PIPE_BUF, le module garantit que les
+ contenus des différents fragments ne se recouperont pas. La valeur
+ de PIPE_BUF varie en fonction du système d'exploitation.</p>
<p>La BNF du format du fragment est la suivante :</p>
header = length SPC timestamp SPC ( request | response ) SPC uuid SPC count
- length = <longueur de fragment sur 16 octets hexadécimaux>
- timestamp = <temps depuis 1970 en microsecondes sur 16 octets hexadécimaux>
+ length = <longueur de fragment sur 16 octets hexadécimaux>
+ timestamp = <temps depuis 1970 en microsecondes sur 16 octets hexadécimaux>
request = "<"
response = ">"
- uuid = <uuid formaté de la connexion>
- count = <numéro hexadécimal du fragment dans la connexion>
+ uuid = <uuid formaté de la connexion>
+ count = <numéro hexadécimal du fragment dans la connexion>
body = <contenu binaire du fragment>
CRLF = <un retour chariot suivi d'une nouvelle ligne>
</pre>
- <p>Tous les fragments d'une connexion ou d'une requête partagent le
- même UUID, selon que les connexions ou les requêtes sont
- enregistrées ou non. Si les connexions sont enregistrées, plusieurs
- requêtes peuvent apparaître dans la même connexion. Un fragment de
+ <p>Tous les fragments d'une connexion ou d'une requête partagent le
+ même UUID, selon que les connexions ou les requêtes sont
+ enregistrées ou non. Si les connexions sont enregistrées, plusieurs
+ requêtes peuvent apparaître dans la même connexion. Un fragment de
longueur nulle indique la fin de la connexion.</p>
- <p>Certains fragments peuvent manquer ou être supprimés si le
+ <p>Certains fragments peuvent manquer ou être supprimés si le
processus qui les lit est trop lent. Si cela se produit, il y aura
des trous dans le comptage des connections. Un avertissement
- indiquant l'UUID et le numéro du fragment supprimé sera enregistré
+ indiquant l'UUID et le numéro du fragment supprimé sera enregistré
dans le journal des erreurs.</p>
- <p>En cas de crash ou d'arrêt forcé du processus httpd, il est
+ <p>En cas de crash ou d'arrêt forcé du processus httpd, il est
possible que le fragment vide de terminaison n'apparaisse pas. Cela
peut aussi se produire si le processus qui lit les fragments n'est
pas assez rapide.</p>
<directivesynopsis>
<name>FirehoseConnectionInput</name>
-<description>Capture le trafic entrant dans le serveur à chaque
+<description>Capture le trafic entrant dans le serveur à chaque
connexion.</description>
<syntax>FirehoseConnectionInput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Capture le trafic entrant dans le serveur à chaque connexion.
- Plusieurs requêtes seront capturées pour la même connexion si les
- connexions persistantes sont activées.</p>
+ <p>Capture le trafic entrant dans le serveur à chaque connexion.
+ Plusieurs requêtes seront capturées pour la même connexion si les
+ connexions persistantes sont activées.</p>
<example><title>Exemple</title>
<highlight language="config">
<directivesynopsis>
<name>FirehoseConnectionOutput</name>
-<description>Capture le trafic sortant du serveur à chaque connexion</description>
+<description>Capture le trafic sortant du serveur à chaque connexion</description>
<syntax>FirehoseConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Capture le trafic sortant du serveur à chaque connexion.
- Plusieurs requêtes seront capturées pour la même connexion si les
- connexions persistantes sont activées.
+ <p>Capture le trafic sortant du serveur à chaque connexion.
+ Plusieurs requêtes seront capturées pour la même connexion si les
+ connexions persistantes sont activées.
</p>
<example><title>Exemple</title>
<directivesynopsis>
<name>FirehoseRequestInput</name>
-<description>Capture le trafic entrant dans le serveur à chaque requête</description>
+<description>Capture le trafic entrant dans le serveur à chaque requête</description>
<syntax>FirehoseRequestInput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Capture le trafic entrant dans le serveur à chaque requête. Les
- requêtes sont capturées séparément, que les connexions persistantes
- soient activées ou non.</p>
+ <p>Capture le trafic entrant dans le serveur à chaque requête. Les
+ requêtes sont capturées séparément, que les connexions persistantes
+ soient activées ou non.</p>
<example><title>Exemple</title>
<highlight language="config">
<directivesynopsis>
<name>FirehoseRequestOutput</name>
-<description>Capture le trafic sortant du serveur à chaque requête</description>
+<description>Capture le trafic sortant du serveur à chaque requête</description>
<syntax>FirehoseRequestOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Capture le trafic sortant du serveur à chaque requête. Les
- requêtes sont capturées séparément, que les connexions persistantes
- soient activées ou non.</p>
+ <p>Capture le trafic sortant du serveur à chaque requête. Les
+ requêtes sont capturées séparément, que les connexions persistantes
+ soient activées ou non.</p>
<example><title>Exemple</title>
<highlight language="config">
<compatibility></compatibility>
<usage>
- <p>Capture le trafic reçu par mod_proxy.</p>
+ <p>Capture le trafic reçu par mod_proxy.</p>
<example><title>Exemple</title>
<highlight language="config">
<directivesynopsis>
<name>FirehoseProxyConnectionOutput</name>
-<description>Capture le trafic envoyé par mod_proxy</description>
+<description>Capture le trafic envoyé par mod_proxy</description>
<syntax>FirehoseProxyConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Capture le trafic envoyé par mod_proxy.</p>
+ <p>Capture le trafic envoyé par mod_proxy.</p>
<example><title>Exemple</title>
<highlight language="config">
<modulesynopsis metafile="mod_ident.xml.meta">
<name>mod_ident</name>
-<description>Recherche d'identité conformément à la RFC
+<description>Recherche d'identité conformément à la RFC
1413</description>
<status>Extension</status>
<sourcefile>mod_ident.c</sourcefile>
<identifier>ident_module</identifier>
<summary>
- <p>Ce module interroge un démon compatible <a
+ <p>Ce module interroge un démon compatible <a
href="https://www.rfc-editor.org/rfc/rfc1413">RFC 1413</a> sur un
- serveur distant afin de déterminer le propriétaire d'une
+ serveur distant afin de déterminer le propriétaire d'une
connexion.</p>
</summary>
<seealso><module>mod_log_config</module></seealso>
<directivesynopsis>
<name>IdentityCheck</name>
-<description>Active la journalisation de l'identité RFC 1413 de
+<description>Active la journalisation de l'identité RFC 1413 de
l'utilisateur distant</description>
<syntax>IdentityCheck On|Off</syntax>
<default>IdentityCheck Off</default>
<p>Cette directive permet d'activer la journalisation compatible <a
href="https://www.rfc-editor.org/rfc/rfc1413">RFC 1413</a> du nom de
l'utilisateur distant pour chaque connexion, si la machine du client
- exécute identd ou un démon similaire. Cette information est
- enregistrée dans le journal des accès en utilisant la <a
- href="mod_log_config.html#formats">chaîne de formatage</a>
+ exécute identd ou un démon similaire. Cette information est
+ enregistrée dans le journal des accès en utilisant la <a
+ href="mod_log_config.html#formats">chaîne de formatage</a>
<code>%...l</code>.</p>
<note>
Cette information ne doit pas faire l'objet d'une confiance
- absolue, et elle ne doit être utilisée que dans le cadre d'un
- traçage grossier.
+ absolue, et elle ne doit être utilisée que dans le cadre d'un
+ traçage grossier.
</note>
- <p>Notez que de sérieux problèmes de délais peuvent survenir lors
- des accès à votre serveur, car chaque requête nécessite l'exécution
+ <p>Notez que de sérieux problèmes de délais peuvent survenir lors
+ des accès à votre serveur, car chaque requête nécessite l'exécution
d'un de ces processus de recherche. Lorsque des pare-feu ou des
- serveurs mandataires sont impliqués, chaque recherche est
- susceptible d'échouer et ajouter un temps de latence conformément
- à la directive <directive
- module="mod_ident">IdentityCheckTimeout</directive>. En général, ces
- recherches ne se révèlent donc pas très utiles sur des serveurs
+ serveurs mandataires sont impliqués, chaque recherche est
+ susceptible d'échouer et ajouter un temps de latence conformément
+ à la directive <directive
+ module="mod_ident">IdentityCheckTimeout</directive>. En général, ces
+ recherches ne se révèlent donc pas très utiles sur des serveurs
publics accessibles depuis l'Internet.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>IdentityCheckTimeout</name>
-<description>Détermine le délai d'attente pour les requêtes
+<description>Détermine le délai d'attente pour les requêtes
ident</description>
<syntax>IdentityCheckTimeout <var>secondes</var></syntax>
<default>IdentityCheckTimeout 30</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<usage>
- <p>Cette directive permet de spécifier le délai d'attente d'une
- requête ident. Une valeur par défaut de 30 secondes est recommandée
+ <p>Cette directive permet de spécifier le délai d'attente d'une
+ requête ident. Une valeur par défaut de 30 secondes est recommandée
par la <a href="https://www.rfc-editor.org/rfc/rfc1413">RFC 1413</a>,
- principalement pour prévenir les problèmes qui pourraient être
- induits par la charge du réseau. Vous pouvez cependant ajuster la
- valeur de ce délai en fonction du débit de votre réseau local.</p>
+ principalement pour prévenir les problèmes qui pourraient être
+ induits par la charge du réseau. Vous pouvez cependant ajuster la
+ valeur de ce délai en fonction du débit de votre réseau local.</p>
</usage>
</directivesynopsis>
<example>
<!--#comment Blah Blah Blah --><br/>
- or<br/>
+ or<br/>
<!--#comment text="Blah Blah Blah" -->
</example>
</section> <!-- /comment -->
en utilisant des espaces. Ainsi,</p>
<example>
- <p><code><var>chaîne1</var> <var
- >chaîne2</var></code> devient <code><var>chaîne1</var> <var
+ <p><code><var>chaîne1</var> <var
+ >chaîne2</var></code> devient <code><var>chaîne1</var> <var
>chaîne2</var></code><br />
<br />
et<br />
<br />
- <code>'<var>chaîne1</var> <var
+ <code>'<var>chaîne1</var> <var
>chaîne2</var>'</code> devient <code><var
- >chaîne1</var> <var>chaîne2</var></code>.</p>
+ >chaîne1</var> <var>chaîne2</var></code>.</p>
</example>
<note><title>Optimisation des expressions booléennes</title>
<modulesynopsis metafile="mod_journald.xml.meta">
<name>mod_journald</name>
-<description>Implémentation du fournisseur de journalisation d'erreurs
+<description>Implémentation du fournisseur de journalisation d'erreurs
"journald"</description>
<status>Extension</status>
<sourcefile>mod_journald.c</sourcefile>
<identifier>journald_module</identifier>
<summary>
- <p>Ce module implémente le fournisseur de journalisation d'erreurs
+ <p>Ce module implémente le fournisseur de journalisation d'erreurs
"journald". Il permet l'enregistrement des messages d'erreur et la
- gestion des journaux personnalisés via systemd-journald(8).</p>
+ gestion des journaux personnalisés via systemd-journald(8).</p>
</summary>
<section id="structured">
- <title>Jounalisation structurée</title>
+ <title>Jounalisation structurée</title>
<p>Systemd-journald permet d'effectuer une journalisation
- structurée, et autorise donc le filtrage des messages en fonction de
- diverses variables. Les variables actuellement supportées sont :
+ structurée, et autorise donc le filtrage des messages en fonction de
+ diverses variables. Les variables actuellement supportées sont :
</p>
<dl>
<dt><code>LOG</code></dt>
Pour CustomLog ou TransferLog, la valeur correspond au premier
argument de ces directives.</dd>
<dt><code>REQUEST_HOSTNAME</code></dt>
- <dd>Le nom d'hôte tel qu'il est fourni dans l'URI, ou l'en-tête
- Host: de la requête.</dd>
+ <dd>Le nom d'hôte tel qu'il est fourni dans l'URI, ou l'en-tête
+ Host: de la requête.</dd>
<dt><code>REQUEST_USER</code></dt>
<dd>Correspond au nom d'utilisateur si une authentification a eu
lieu.</dd>
<dt><code>REQUEST_USERAGENT_IP</code></dt>
- <dd>L'adresse IP de l'agent qui a envoyé la requête.</dd>
+ <dd>L'adresse IP de l'agent qui a envoyé la requête.</dd>
<dt><code>REQUEST_URI</code></dt>
<dd>La partie chemin de l'URI, ou "/" si l'URI ne contient pas de
chemin.</dd>
<dt><code>SERVER_HOSTNAME</code></dt>
- <dd>Le nom d'hôte du serveur pour lequel le message a été généré.</dd>
+ <dd>Le nom d'hôte du serveur pour lequel le message a été généré.</dd>
</dl>
- <p>Ces variables peuvent par exemple être utilisées pour ne montrer
+ <p>Ces variables peuvent par exemple être utilisées pour ne montrer
que les messages concernant un URI particulier via la commande
<code>journalctl</code> :
</p>
<section id="examples">
<title>Exemples</title>
- <p>Si le système le supporte, il est possible d'utiliser
- systemd-journald(8) pour effectuer la journalisation en spécifiant
- <code>journald</code> à la place d'un nom de fichier dans la
+ <p>Si le système le supporte, il est possible d'utiliser
+ systemd-journald(8) pour effectuer la journalisation en spécifiant
+ <code>journald</code> à la place d'un nom de fichier dans la
directive ErrorLog (voir <module>core</module>).
</p>
<highlight language="config">ErrorLog journald</highlight>
- <p>Spécifier <code>journald</code> comme fournisseur de journal
+ <p>Spécifier <code>journald</code> comme fournisseur de journal
d'erreurs avec la directive CustomLog (voir
<module>mod_log_config</module>) active la journalisation via
- systemd-journald(8) si le système le supporte.
+ systemd-journald(8) si le système le supporte.
</p>
<highlight language="config">
CustomLog "journald" "%h %l %u %t \"%r\" %>s %b"
</highlight>
- <note type="warning"><title>Avertissement en matière de performances</title><p>
- Actuellement, systemd-journald n'est pas conçu pour une
- jounalisation à haut débit et son utilisation pour la journalisation
- des accès peut induire une baisse importante de performances.
+ <note type="warning"><title>Avertissement en matière de performances</title><p>
+ Actuellement, systemd-journald n'est pas conçu pour une
+ jounalisation à haut débit et son utilisation pour la journalisation
+ des accès peut induire une baisse importante de performances.
</p></note>
</section>
<tr><th>lbfactor</th>
<td>70</td>
<td>30</td></tr>
- <tr><td colspan="2"> </td></tr>
+ <tr><td colspan="2"> </td></tr>
<tr><th>lbstatus</th>
<td><em>-30</em></td>
<td>30</td></tr>
<table border="1" style="zebra">
<columnspec><column width=".2"/><column width=".8"/></columnspec>
- <tr><th>Chaîne de format</th>
+ <tr><th>Chaîne de format</th>
<th>Description</th></tr>
<tr><td><code>%%</code></td>
<highlight language="config">
<Location "/foo/">
- LogMessage "/foo/ has been requested"
+ LogMessage "/foo/ has been requested"
</Location>
</highlight>
</li>
dans une sous-requête :
<highlight language="config">
<Location "/foo/">
- LogMessage "subrequest to /foo/" hook=type_checker "expr=-T %{IS_SUBREQ}"
+ LogMessage "subrequest to /foo/" hook=type_checker "expr=-T %{IS_SUBREQ}"
</Location>
</highlight>
"X-Foo" à chaque étape du traitement :
<highlight language="config">
<Location "/">
- LogMessage "%{reqenv:X-Foo}" hook=all
+ LogMessage "%{reqenv:X-Foo}" hook=all
</Location>
</highlight>
En association avec les repères de temps en microsecondes du journal des erreurs,
<modulesynopsis metafile="mod_log_forensic.xml.meta">
<name>mod_log_forensic</name>
-<description>Journalisation légale des requêtes envoyées au
+<description>Journalisation légale des requêtes envoyées au
serveur</description>
<status>Extension</status>
<sourcefile>mod_log_forensic.c</sourcefile>
<identifier>log_forensic_module</identifier>
<summary>
- <p>Ce module permet la journalisation légale des requêtes client.</p>
+ <p>Ce module permet la journalisation légale des requêtes client.</p>
- <p>La création du fichier journal correspondant s'effectue via la
+ <p>La création du fichier journal correspondant s'effectue via la
directive <directive>ForensicLog</directive> comme suit :</p>
<highlight language="config">
ForensicLog logs/forensic_log
</highlight>
- <p>La journalisation s'effectuant avant et après le traitement de la
- requête, le journal légal contient deux lignes pour chaque requête.
- Le processus de journalisation légale est très strict, à savoir
+ <p>La journalisation s'effectuant avant et après le traitement de la
+ requête, le journal légal contient deux lignes pour chaque requête.
+ Le processus de journalisation légale est très strict, à savoir
:</p>
<ul>
- <li>Le format est figé. Vous ne pouvez pas modifier le format du
- journal à l'exécution.</li>
- <li>S'il ne peut pas enregistrer ses données, le processus enfant se
- termine aussitôt, et peut éventuellement enregistrer un vidage
- mémoire (selon la définition de la directive <directive
+ <li>Le format est figé. Vous ne pouvez pas modifier le format du
+ journal à l'exécution.</li>
+ <li>S'il ne peut pas enregistrer ses données, le processus enfant se
+ termine aussitôt, et peut éventuellement enregistrer un vidage
+ mémoire (selon la définition de la directive <directive
module="mpm_common">CoreDumpDirectory</directive>).</li>
</ul>
- <p>Pour interpréter les données du journal
- légal afin d'identifier les requêtes dont le traitement n'a
- pas été mené à bien, vous pouvez vous
+ <p>Pour interpréter les données du journal
+ légal afin d'identifier les requêtes dont le traitement n'a
+ pas été mené à bien, vous pouvez vous
aider du script <code>check_forensic</code> qui se trouve dans le
- répertoire support de la distribution.</p>
+ répertoire support de la distribution.</p>
<example>
check-forensic forensic_log
</example>
- <note>Note de traduction : le terme "légal" utilisé dans le présent document ne suggère aucunement que
- ce module apporte une valeur juridique aux journaux. Il est à comprendre dans le contexte
- similaire à ce que l'on trouve en analyse medico-légale. En d'autres termes, la finalité de ce module
- est de simplifier les opérations d'investigation autour du traitement des requêtes par le serveur.</note>
+ <note>Note de traduction : le terme "légal" utilisé dans le présent document ne suggère aucunement que
+ ce module apporte une valeur juridique aux journaux. Il est à comprendre dans le contexte
+ similaire à ce que l'on trouve en analyse medico-légale. En d'autres termes, la finalité de ce module
+ est de simplifier les opérations d'investigation autour du traitement des requêtes par le serveur.</note>
</summary>
<seealso><a href="../logs.html">Les fichiers journaux
d'Apache</a></seealso>
<seealso><module>mod_log_config</module></seealso>
<section id="formats"><title>Format du journal Forensic</title>
- <p>Chaque requête fait l'objet d'une double journalisation. La
- requête est journalisée une première fois avant son traitement
- (c'est à dire après la réception des en-têtes). La deuxième entrée
- du journal est écrite <em>après</em> le traitement de la requête, en
+ <p>Chaque requête fait l'objet d'une double journalisation. La
+ requête est journalisée une première fois avant son traitement
+ (c'est à dire après la réception des en-têtes). La deuxième entrée
+ du journal est écrite <em>après</em> le traitement de la requête, en
fait au moment de la journalisation habituelle.</p>
- <p>Un identifiant unique est attribué à chaque requête afin de
- pouvoir l'identifier. Cette identifiant légal peut faire l'objet
- d'un enregistrement dans le journal standard en utilisant l'élément
- de chaîne de format <code>%{forensic-id}n</code>. Si vous utilisez
- <module>mod_unique_id</module>, c'est l'identifiant qu'il génère qui
- sera utilisé.</p>
+ <p>Un identifiant unique est attribué à chaque requête afin de
+ pouvoir l'identifier. Cette identifiant légal peut faire l'objet
+ d'un enregistrement dans le journal standard en utilisant l'élément
+ de chaîne de format <code>%{forensic-id}n</code>. Si vous utilisez
+ <module>mod_unique_id</module>, c'est l'identifiant qu'il génère qui
+ sera utilisé.</p>
- <p>La première partie de la journalisation de la requête enregistre
- l'identifiant légal, la ligne de la requête et tous les en-têtes
- reçus séparés par des caractères pipe (<code>|</code>). Voici à
- titre d'exemple à quoi pourrait ressembler une telle entrée (tout
- étant rassemblé sur une seule ligne) :</p>
+ <p>La première partie de la journalisation de la requête enregistre
+ l'identifiant légal, la ligne de la requête et tous les en-têtes
+ reçus séparés par des caractères pipe (<code>|</code>). Voici à
+ titre d'exemple à quoi pourrait ressembler une telle entrée (tout
+ étant rassemblé sur une seule ligne) :</p>
<example>
+yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
Firefox/0.8|Accept:image/png, <var>etc...</var>
</example>
- <p>Le caractère plus ('+') de début indique qu'il s'agit de la
- première entrée de journal pour cette requête. La seconde entrée ne
- contiendra qu'un caractère moins ('-') suivi de l'identifiant :</p>
+ <p>Le caractère plus ('+') de début indique qu'il s'agit de la
+ première entrée de journal pour cette requête. La seconde entrée ne
+ contiendra qu'un caractère moins ('-') suivi de l'identifiant :</p>
<example>
-yQtJf8CoAB4AAFNXBIEAAAAA
<p>Le script <code>check_forensic</code> prend comme argument le nom
du fichier journal. Il recherche ces paires d'identifiants
<code>+</code>/<code>-</code> et affiche un message d'erreur si la
- journalisation d'une requête n'est pas complète.</p>
+ journalisation d'une requête n'est pas complète.</p>
</section>
-<section id="security"><title>Considérations à propos de
-sécurité</title>
+<section id="security"><title>Considérations à propos de
+sécurité</title>
<p>Voir le document <a
- href="../misc/security_tips.html#serverroot">conseils en matière de
- sécurité</a> pour des détails sur les raisons pour lesquelles votre
- sécurité pourrait être compromise si le répertoire dans lequel les
- fichiers journaux sont stockés sont inscriptibles par tout autre
- utilisateur que celui qui démarre le serveur.</p>
- <p>Les fichiers journaux peuvent contenir des données sensibles
- comme le contenu des en-têtes <code>Authorization:</code> (qui
- peuvent contenir des mots de passe) ; ils ne doivent donc être
- lisibles que par l'utilisateur qui démarre le serveur.</p>
+ href="../misc/security_tips.html#serverroot">conseils en matière de
+ sécurité</a> pour des détails sur les raisons pour lesquelles votre
+ sécurité pourrait être compromise si le répertoire dans lequel les
+ fichiers journaux sont stockés sont inscriptibles par tout autre
+ utilisateur que celui qui démarre le serveur.</p>
+ <p>Les fichiers journaux peuvent contenir des données sensibles
+ comme le contenu des en-têtes <code>Authorization:</code> (qui
+ peuvent contenir des mots de passe) ; ils ne doivent donc être
+ lisibles que par l'utilisateur qui démarre le serveur.</p>
</section>
<directivesynopsis>
<name>ForensicLog</name>
-<description>Définit le nom de fichier du journal légal</description>
+<description>Définit le nom de fichier du journal légal</description>
<syntax>ForensicLog <var>nom-fichier</var>|<var>pipe</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>La directive <directive>ForensicLog</directive> permet de
- contrôler la journalisation des requêtes à des fins d'analyse
- légale. Chaque entrée du journal se voit assigner un identifiant
- unique qui peut être associé à la requête en utilisant la directive
+ contrôler la journalisation des requêtes à des fins d'analyse
+ légale. Chaque entrée du journal se voit assigner un identifiant
+ unique qui peut être associé à la requête en utilisant la directive
<directive module="mod_log_config">CustomLog</directive> habituelle.
- <module>mod_log_forensic</module> crée un élément nommé
- <code>forensic-id</code>, qui peut être ajouté au journal standard
- en utilisant l'élément de format <code>%{forensic-id}n</code>.</p>
+ <module>mod_log_forensic</module> crée un élément nommé
+ <code>forensic-id</code>, qui peut être ajouté au journal standard
+ en utilisant l'élément de format <code>%{forensic-id}n</code>.</p>
- <p>L'argument, qui permet de spécifier l'emplacement vers lequel le
- journal légal sera écrit, peut contenir les deux types de valeurs
+ <p>L'argument, qui permet de spécifier l'emplacement vers lequel le
+ journal légal sera écrit, peut contenir les deux types de valeurs
suivants :</p>
<dl>
<dt><var>nom-fichier</var></dt>
- <dd>Un nom de fichier relatif au répertoire défini par la
+ <dd>Un nom de fichier relatif au répertoire défini par la
directive <directive module="core">ServerRoot</directive>.</dd>
<dt><var>pipe</var></dt>
- <dd>Le caractère pipe "<code>|</code>", suivi du chemin vers un
+ <dd>Le caractère pipe "<code>|</code>", suivi du chemin vers un
programme qui recevra les informations de la journalisation sur
- son entrée standard. Le nom du programme peut être relatif au
- répertoire défini par la directive <directive
+ son entrée standard. Le nom du programme peut être relatif au
+ répertoire défini par la directive <directive
module="core">ServerRoot</directive>.
- <note type="warning"><title>Sécurité :</title>
- <p>Si les journaux sont redirigés vers un programme, ce dernier
- s'exécutera sous l'utilisateur qui a démarré
+ <note type="warning"><title>Sécurité :</title>
+ <p>Si les journaux sont redirigés vers un programme, ce dernier
+ s'exécutera sous l'utilisateur qui a démarré
<program>httpd</program>. Ce sera l'utilisateur root si le serveur
- a été démarré par root ; vérifiez que le programme est
- sécurisé ou passe sous le contrôle d'un utilisateur possédant des
+ a été démarré par root ; vérifiez que le programme est
+ sécurisé ou passe sous le contrôle d'un utilisateur possédant des
droits restreints.</p>
</note>
<note><title>Note</title>
- <p>Lors de la spécification d'un chemin de fichier sur les
+ <p>Lors de la spécification d'un chemin de fichier sur les
plate-formes non-Unix, il faut prendre soin de ne pas oublier
- que seuls les slashes directs doivent être utilisés, même si la
- plate-forme autorise l'emploi d'anti-slashes. D'une manière
- générale, c'est une bonne idée que de n'utiliser que des slashes
+ que seuls les slashes directs doivent être utilisés, même si la
+ plate-forme autorise l'emploi d'anti-slashes. D'une manière
+ générale, c'est une bonne idée que de n'utiliser que des slashes
directs dans les fichiers de configuration.</p>
</note></dd>
</dl>
qui seront remplacées comme suit dans le fichier journal :</p>
<table border="1" style="zebra">
- <tr><th>Chaîne de Format</th>
+ <tr><th>Chaîne de Format</th>
<th>Description</th></tr>
<tr><td><code>%I</code></td>
<modulesynopsis metafile="mod_policy.xml.meta">
<name>mod_policy</name>
-<description>Mise en conformité avec le protocole HTTP.</description>
+<description>Mise en conformité avec le protocole HTTP.</description>
<status>Extension</status>
<sourcefile>mod_policy.c</sourcefile>
<identifier>policy_module</identifier>
<summary>
- <p>Le protocole HTTP recommande aux clients d'être "indulgents pour
- ce qu'ils doivent accepter", et aux serveurs d'être "stricts pour ce
- qu'ils envoient". Dans certains cas, il peut s'avérer difficile de
- déterminer si un serveur ou une application a été mal configuré,
- sert un contenu qui ne peut pas être mis en cache ou se comporte de
- manière non optimale, car le client HTTP est souvent en mesure de
- compenser les défauts du serveur. Ces problèmes peuvent induire une
- consommation de bande passante excessive, ou même une interruption
- de service suite à une charge trop importante du serveur.</p>
+ <p>Le protocole HTTP recommande aux clients d'être "indulgents pour
+ ce qu'ils doivent accepter", et aux serveurs d'être "stricts pour ce
+ qu'ils envoient". Dans certains cas, il peut s'avérer difficile de
+ déterminer si un serveur ou une application a été mal configuré,
+ sert un contenu qui ne peut pas être mis en cache ou se comporte de
+ manière non optimale, car le client HTTP est souvent en mesure de
+ compenser les défauts du serveur. Ces problèmes peuvent induire une
+ consommation de bande passante excessive, ou même une interruption
+ de service suite à une charge trop importante du serveur.</p>
<p>Le module <module>mod_policy</module> propose un jeu de filtres
- qui permettent de tester la conformité du serveur au protocole HTTP.
- Ces tests permettent à l'administrateur du serveur de journaliser
- les violations, ou même de rejeter une réponse losque certaines
- conditions spécifiées se réalisent.</p>
-
- <p>Il devient ainsi possible de définir des critères de conformité
- minimale au protocole HTTP pour développer des applications
- sans problème. En outre, il est possible de configurer un
- mandataire inverse ou un cache pour qu'il se protège lui-même contre
- les serveurs d'origine mal configurés ou les contenus indument
- impossible à être mis en cache, ou un mécanisme qui détecte les
- erreurs de configuration au sein du serveur lui-même.</p>
+ qui permettent de tester la conformité du serveur au protocole HTTP.
+ Ces tests permettent à l'administrateur du serveur de journaliser
+ les violations, ou même de rejeter une réponse losque certaines
+ conditions spécifiées se réalisent.</p>
+
+ <p>Il devient ainsi possible de définir des critères de conformité
+ minimale au protocole HTTP pour développer des applications
+ sans problème. En outre, il est possible de configurer un
+ mandataire inverse ou un cache pour qu'il se protège lui-même contre
+ les serveurs d'origine mal configurés ou les contenus indument
+ impossible à être mis en cache, ou un mécanisme qui détecte les
+ erreurs de configuration au sein du serveur lui-même.</p>
</summary>
<seealso><a href="../filter.html">Les filtres</a></seealso>
-<seealso><a href="../compliance.html">Conformité au protocole HTTP</a></seealso>
+<seealso><a href="../compliance.html">Conformité au protocole HTTP</a></seealso>
<section id="actions">
<title>Actions</title>
- <p>Si une règle est violée, il possible d'effectuer les actions
+ <p>Si une règle est violée, il possible d'effectuer les actions
suivantes :</p>
<dl>
<dt><strong>ignore</strong></dt>
- <dd>La vérification de la politique de conformité sera désactivée
- pour l'espace d'URL spécifié, même si le filtre est présent.</dd>
+ <dd>La vérification de la politique de conformité sera désactivée
+ pour l'espace d'URL spécifié, même si le filtre est présent.</dd>
<dt><strong>log</strong></dt>
- <dd>La vérification de la politique de conformité sera exécutée, et
- si une violation est détectée, un avertissement sera enregistré dans
- le journal error_log du serveur, et un en-tête <code>Warning</code>
- ajouté à la réponse en tant qu'information à destination du client.</dd>
+ <dd>La vérification de la politique de conformité sera exécutée, et
+ si une violation est détectée, un avertissement sera enregistré dans
+ le journal error_log du serveur, et un en-tête <code>Warning</code>
+ ajouté à la réponse en tant qu'information à destination du client.</dd>
<dt><strong>enforce</strong></dt>
- <dd>La vérification de la politique de conformité sera exécutée,
+ <dd>La vérification de la politique de conformité sera exécutée,
The policy check will be executed, and if a violation is detected
an error will be logged to the server error_log, a
</dl>
- <p>Il est aussi possible de désactiver toutes les règles pour un
- espace d'URL donné, si le besoin s'en fait sentir, via la directive
+ <p>Il est aussi possible de désactiver toutes les règles pour un
+ espace d'URL donné, si le besoin s'en fait sentir, via la directive
<directive module="mod_policy">PolicyFilter</directive>.</p>
<p>En outre, la directive <directive
module="mod_policy">PolicyEnvironment</directive> permet de
- spécifier une variable d'environnement qui, si elle est définie, va
- court-circuiter les règles ou diminuer leur portée.</p>
+ spécifier une variable d'environnement qui, si elle est définie, va
+ court-circuiter les règles ou diminuer leur portée.</p>
</section>
<dl>
<dt><strong><a href="../compliance.html#policytype">POLICY_TYPE</a>
- </strong>: Impose la validité des types de contenus</dt>
- <dd>La requête peut être rejetée suite à la présence de types de contenus vides
- ou syntaxiquement invalides. Les types peuvent aussi être restreints
- à une liste pouvant contenir des caractères génériques ? et *.</dd>
+ </strong>: Impose la validité des types de contenus</dt>
+ <dd>La requête peut être rejetée suite à la présence de types de contenus vides
+ ou syntaxiquement invalides. Les types peuvent aussi être restreints
+ à une liste pouvant contenir des caractères génériques ? et *.</dd>
<dt><strong><a href="../compliance.html#policylength">POLICY_LENGTH</a>
- </strong>: Impose la présence de l'en-tête Content-Length</dt>
- <dd>La longueur des réponses peut être spécifiée de trois manières
- différentes : en spécifiant à l'avance une longueur explicite, en
- utilisant un codage de morcellement (chunking) pour définir la
- longueur, ou en ne spécifiant aucune longueur et en terminant la
- requête lorsque son traitement est achevé. L'absence de
- spécification d'une longueur de contenu peut affecter la possibilité
- de mise en cache de la réponse, et empêcher l'utilisation de la
- persistance avec les requêtes de type HTTP/1.0. Ce filtre impose la
- présence d'une longueur de contenu explicite dans la réponse.</dd>
+ </strong>: Impose la présence de l'en-tête Content-Length</dt>
+ <dd>La longueur des réponses peut être spécifiée de trois manières
+ différentes : en spécifiant à l'avance une longueur explicite, en
+ utilisant un codage de morcellement (chunking) pour définir la
+ longueur, ou en ne spécifiant aucune longueur et en terminant la
+ requête lorsque son traitement est achevé. L'absence de
+ spécification d'une longueur de contenu peut affecter la possibilité
+ de mise en cache de la réponse, et empêcher l'utilisation de la
+ persistance avec les requêtes de type HTTP/1.0. Ce filtre impose la
+ présence d'une longueur de contenu explicite dans la réponse.</dd>
<dt><strong><a href="../compliance.html#policykeepalive">POLICY_KEEPALIVE
</a></strong>: Impose l'option de persistance</dt>
<dd>Moins restrictif que le filtre POLICY_LENGTH, ce filtre impose
- la possibilité de persistance de la réponse. Si la réponse n'a pas
- de longueur définie à 0 par le protocole, si elle n'est pas une
- erreur, et si elle ne contient pas d'en-tête Content-Length ou si
- elle est de type HTTP/1.1 et ne contient pas l'en-tête
- Content-Encoding: chunked, alors elle sera rejetée.</dd>
+ la possibilité de persistance de la réponse. Si la réponse n'a pas
+ de longueur définie à 0 par le protocole, si elle n'est pas une
+ erreur, et si elle ne contient pas d'en-tête Content-Length ou si
+ elle est de type HTTP/1.1 et ne contient pas l'en-tête
+ Content-Encoding: chunked, alors elle sera rejetée.</dd>
<dt><strong><a href="../compliance.html#policyvary">POLICY_VARY</a>
- </strong>: Interdit la présence de certains en-têtes au sein des
- en-têtes Vary</dt>
- <dd>Si l'en-tête Vary contient un des en-têtes spécifiés, ce filtre
- va rejeter la requête. Un cas typique est la présence de l'en-tête
- User-Agent dans l'en-tête Vary, ce qui peut être à l'origine d'une
- condition de déni de service au niveau du cache.</dd>
+ </strong>: Interdit la présence de certains en-têtes au sein des
+ en-têtes Vary</dt>
+ <dd>Si l'en-tête Vary contient un des en-têtes spécifiés, ce filtre
+ va rejeter la requête. Un cas typique est la présence de l'en-tête
+ User-Agent dans l'en-tête Vary, ce qui peut être à l'origine d'une
+ condition de déni de service au niveau du cache.</dd>
<dt><strong><a href="../compliance.html#policyvalidation">
- POLICY_VALIDATION</a></strong>: Impose la présence d'un en-tête Etag
+ POLICY_VALIDATION</a></strong>: Impose la présence d'un en-tête Etag
et/ou Last-Modified</dt>
- <dd>La possibilité pour un cache de déterminer si une entité qu'il
- contient peut être rafraîchie dépend de la présence d'un en-tête
- Etag et/ou Last-Modified pour vérifier si elle est valide. La requête sera
- rejetée en cas d'absence de ces deux en-têtes, ou d'une syntaxe
- invalide d'un de ces deux en-têtes.</dd>
+ <dd>La possibilité pour un cache de déterminer si une entité qu'il
+ contient peut être rafraîchie dépend de la présence d'un en-tête
+ Etag et/ou Last-Modified pour vérifier si elle est valide. La requête sera
+ rejetée en cas d'absence de ces deux en-têtes, ou d'une syntaxe
+ invalide d'un de ces deux en-têtes.</dd>
<dt><strong><a href="../compliance.html#policyconditional">
POLICY_CONDITIONAL</a></strong>: Impose un traitement conforme des
- en-têtes conditionnels</dt>
- <dd>Lorsqu'une requête contient des en-têtes conditonnels, un
- serveur doit répondre dans certaines conditions avec un code
+ en-têtes conditionnels</dt>
+ <dd>Lorsqu'une requête contient des en-têtes conditonnels, un
+ serveur doit répondre dans certaines conditions avec un code
<code>304 Not Modified</code> ou <code>412 Precondition
- Failed</code>. Il arrive q'un serveur ignore les en-têtes
- conditionnels, et cela diminue l'efficacité du mécanisme de mise en
- cache HTTP. Ce filtre rejète les requêtes lorsqu'un en-tête
- conditionnel était présent, et une réponse 2xx a été renvoyée au
- lieu de la réponse 304 ou 412 attendue.</dd>
+ Failed</code>. Il arrive q'un serveur ignore les en-têtes
+ conditionnels, et cela diminue l'efficacité du mécanisme de mise en
+ cache HTTP. Ce filtre rejète les requêtes lorsqu'un en-tête
+ conditionnel était présent, et une réponse 2xx a été renvoyée au
+ lieu de la réponse 304 ou 412 attendue.</dd>
<dt><strong><a href="../compliance.html#policynocache">POLICY_NOCACHE</a>
- </strong>: Impose la possibilité de mise en cache des réponses</dt>
- <dd>Lorsqu'une requête se déclare elle-même impossible à mettre en
- cache, elle est rejetée. C'est le cas si elle contient l'un des
- en-têtes suivants :
+ </strong>: Impose la possibilité de mise en cache des réponses</dt>
+ <dd>Lorsqu'une requête se déclare elle-même impossible à mettre en
+ cache, elle est rejetée. C'est le cas si elle contient l'un des
+ en-têtes suivants :
<ul><li><code>Cache-Control: no-cache</code></li>
<li><code>Pragma: no-cache</code></li>
<li><code>Cache-Control: no-store</code></li>
</ul></dd>
<dt><strong><a href="../compliance.html#policymaxage">POLICY_MAXAGE</a>
- </strong>: Impose une durée de vie minimale</dt>
- <dd>Lorsqu'une réponse possède une durée de vie inférieure à la
- valeur spécifiée, ou si cette durée de vie est heuristique, la
- requête est rejetée. La chronologie de la vérification d'une réponse
+ </strong>: Impose une durée de vie minimale</dt>
+ <dd>Lorsqu'une réponse possède une durée de vie inférieure à la
+ valeur spécifiée, ou si cette durée de vie est heuristique, la
+ requête est rejetée. La chronologie de la vérification d'une réponse
est la suivante :
- <ul><li>Si <code>s-maxage</code> est présent mais d'une valeur trop
+ <ul><li>Si <code>s-maxage</code> est présent mais d'une valeur trop
faible; ou</li>
- <li>Si <code>max-age</code> est présent mais d'une valeur trop
+ <li>Si <code>max-age</code> est présent mais d'une valeur trop
faible; ou</li>
- <li>Si <code>Expires</code> est présent et invalide; ou</li>
- <li><code>Date</code> est présent et invalide; ou</li>
+ <li>Si <code>Expires</code> est présent et invalide; ou</li>
+ <li><code>Date</code> est présent et invalide; ou</li>
<li><code>Expires</code> moins Date est trop faible ; ou</li>
- <li>Aucun en-tête <code>s-maxage</code>, <code>maxage</code>, ou
- <code>Expires</code>/<code>Date</code> n'est présent</li>
+ <li>Aucun en-tête <code>s-maxage</code>, <code>maxage</code>, ou
+ <code>Expires</code>/<code>Date</code> n'est présent</li>
</ul></dd>
<dt><strong><a href="../compliance.html#policyversion">POLICY_VERSION</a>
- </strong>: Impose une version HTTP minimale dans la requête</dt>
- <dd>Lorsqu'une requête possède un numéro de version HTTP inférieur
- au numéro de version minimum requis, la requête est rejetée. Les
- numéros de version suivants sont reconnus :
+ </strong>: Impose une version HTTP minimale dans la requête</dt>
+ <dd>Lorsqu'une requête possède un numéro de version HTTP inférieur
+ au numéro de version minimum requis, la requête est rejetée. Les
+ numéros de version suivants sont reconnus :
<ul><li><code>HTTP/1.1</code></li>
<li><code>HTTP/1.0</code></li>
<li><code>HTTP/0.9</code></li>
<section id="example">
<title>Exemple de configuration</title>
- <p>Voici un exemple de configuration qui protège un serveur qui
- délivre du contenu statique :</p>
+ <p>Voici un exemple de configuration qui protège un serveur qui
+ délivre du contenu statique :</p>
<highlight language="config">
<Location "/">
SetOutputFilter POLICY_TYPE;POLICY_LENGTH;POLICY_KEEPALIVE;POLICY_VARY;POLICY_VALIDATION; \
POLICY_CONDITIONAL;POLICY_NOCACHE;POLICY_MAXAGE;POLICY_VERSION
- # le contenu peut être quelconque, mais l'en-tête Content-Type doit être
- # présent et valide
+ # le contenu peut être quelconque, mais l'en-tête Content-Type doit être
+ # présent et valide
PolicyType enforce */*
- # rejet si aucune longueur de contenu déclarée
+ # rejet si aucune longueur de contenu déclarée
PolicyLength enforce
# pris en charge par le filtre policy length
PolicyKeepalive ignore
- # rejet si l'en-tête User-Agent aparaît dans les en-têtes Vary
+ # rejet si l'en-tête User-Agent aparaît dans les en-têtes Vary
PolicyVary enforce User-Agent
- # la validation est imposée
+ # la validation est imposée
PolicyValidation enforce
- # les réponses conditionnelles non conformes sont rejetées
+ # les réponses conditionnelles non conformes sont rejetées
PolicyConditional enforce
- # les réponses impossibles à mettre en cache sont rejetées
+ # les réponses impossibles à mettre en cache sont rejetées
PolicyNocache enforce
- # la durée de vie doit être au moins d'un jour
+ # la durée de vie doit être au moins d'un jour
PolicyMaxage enforce 86400
- # le numéro de version de la requête peut être quelconque
+ # le numéro de version de la requête peut être quelconque
PolicyVersion ignore HTTP/1.1
</Location>
-# désactivation du filtrage pour le répertoire /server-status
+# désactivation du filtrage pour le répertoire /server-status
<Location "/server-status">
PolicyFilter off
</Location>
<directivesynopsis>
<name>PolicyFilter</name>
-<description>Active ou désactive le filtrage pour un espace d'URL donné.</description>
+<description>Active ou désactive le filtrage pour un espace d'URL donné.</description>
<syntax>PolicyFilter <var>on|off</var></syntax>
<default>on</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Commutateur principal qui permet d'activer ou de désactiver le
- filtrage pour un espace d'URL donné.</p>
+ <p>Commutateur principal qui permet d'activer ou de désactiver le
+ filtrage pour un espace d'URL donné.</p>
<example><title>Example</title>
<highlight language="config">
-# activé par défaut
+# activé par défaut
<Location "/">
PolicyFilter on
</Location>
-# désactivation du filtrage pour le répertoire /server-status
+# désactivation du filtrage pour le répertoire /server-status
<Location "/server-status">
PolicyFilter off
</Location>
<directivesynopsis>
<name>PolicyEnvironment</name>
-<description>Modification des règles de filtrage en fonction d'une
+<description>Modification des règles de filtrage en fonction d'une
variable d'environnement.</description>
<syntax>PolicyEnvironment <var>variable</var> <var>log-value</var> <var>ignore-value</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Limite l'action des règles à la journalisation ou les désactive
- totalement en fonction de la présence d'une variable d'environnement. Si
- la variable spécifiée est présente et égale à la valeur de
- l'argument log-value, les erreurs rencontrées par les filtres ne
- seront que journalisées. Si la variable spécifiée est présente et
- égale à la valeur de l'argument ignore-value, toutes les règles
- seront ignorées.</p>
+ <p>Limite l'action des règles à la journalisation ou les désactive
+ totalement en fonction de la présence d'une variable d'environnement. Si
+ la variable spécifiée est présente et égale à la valeur de
+ l'argument log-value, les erreurs rencontrées par les filtres ne
+ seront que journalisées. Si la variable spécifiée est présente et
+ égale à la valeur de l'argument ignore-value, toutes les règles
+ seront ignorées.</p>
<example><title>Example</title>
<highlight language="config">
-# limitation de l'action des règles si la variable POLICY_CONTROL
-# est présente
+# limitation de l'action des règles si la variable POLICY_CONTROL
+# est présente
PolicyEnvironment POLICY_CONTROL log ignore
</highlight>
</example>
<directivesynopsis>
<name>PolicyConditional</name>
-<description>Active le filtrage des requêtes conditionnelles.</description>
+<description>Active le filtrage des requêtes conditionnelles.</description>
<syntax>PolicyConditional <var>ignore|log|enforce</var></syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui aurait du être
- conditionnelle mais ne l'est pas sera rejetée.</p>
+ <p>Avec l'argument enforce, une réponse qui aurait du être
+ conditionnelle mais ne l'est pas sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# les réponses conditionnelles non conformes doivent être rejetées
+# les réponses conditionnelles non conformes doivent être rejetées
PolicyConditional enforce
</highlight>
</example>
<name>PolicyConditionalURL</name>
<description>URL contenant la description de la politique de filtrage
-des requêtes conditionnelles.</description>
+des requêtes conditionnelles.</description>
<syntax>PolicyConditionalURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL de la documentation
- décrivant la politique de filtrage des requêtes conditionnelles ;
- elle apparaîtra dans les messages d'erreur.</p>
+ <p>Cette directive permet de spécifier l'URL de la documentation
+ décrivant la politique de filtrage des requêtes conditionnelles ;
+ elle apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>PolicyLength</name>
-<description>Active le filtrage de la spécification de la longueur du
+<description>Active le filtrage de la spécification de la longueur du
contenu.</description>
<syntax>PolicyLength <var>ignore|log|enforce</var></syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui ne contient pas
- d'en-tête <code>Content-Length</code> sera rejetée.</p>
+ <p>Avec l'argument enforce, une réponse qui ne contient pas
+ d'en-tête <code>Content-Length</code> sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet suite à l'absence de l'en-tête Content-Length
+# rejet suite à l'absence de l'en-tête Content-Length
PolicyLength enforce
</highlight>
</example>
<name>PolicyLengthURL</name>
<description>URL contenant la description de la politique de filtrage de
-la spécification de la longueur du contenu.</description>
+la spécification de la longueur du contenu.</description>
<syntax>PolicyLengthURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- documentation décrivant la politique de filtrage de la spécification
- de la longueur du contenu ; elle apparaîtra dans les messages
+ <p>Cette directive permet de spécifier l'URL contenant la
+ documentation décrivant la politique de filtrage de la spécification
+ de la longueur du contenu ; elle apparaîtra dans les messages
d'erreur.</p>
</usage>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui ne contient ni en-tête
- <code>Content-Length</code>, ni en-tête
+ <p>Avec l'argument enforce, une réponse qui ne contient ni en-tête
+ <code>Content-Length</code>, ni en-tête
<code>Transfer-Encoding</code> de valeur <code>chunked</code> sera
- rejetée.</p>
+ rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet suite a absence d'en-tête Content-Length ou Transfer-Encoding
+# rejet suite a absence d'en-tête Content-Length ou Transfer-Encoding
PolicyKeepalive enforce
</highlight>
</example>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique de persistance ; elle apparaîtra dans
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique de persistance ; elle apparaîtra dans
les messages d'erreur.</p>
</usage>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui ne contient pas
- d'en-tête <code>Content-Type</code>, ou dont l'en-tête
- <code>Content-Type</code> est mal formé, ou dont l'en-tête
+ <p>Avec l'argument enforce, une réponse qui ne contient pas
+ d'en-tête <code>Content-Type</code>, ou dont l'en-tête
+ <code>Content-Type</code> est mal formé, ou dont l'en-tête
<code>Content-Type</code> contient une valeur qui ne correspond pas
- au(x) modèle(s) spécifié(s) sera rejetée.</p>
+ au(x) modèle(s) spécifié(s) sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
<example><title>Exemple</title>
<highlight language="config">
-# rejet suite à type de contenu mal formé
+# rejet suite à type de contenu mal formé
PolicyType enforce */*
</highlight>
</example>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique des types de contenu ; elle apparaîtra
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique des types de contenu ; elle apparaîtra
dans les messages d'erreur.</p>
</usage>
<directivesynopsis>
<name>PolicyVary</name>
-<description>Active la politique de filtrage de l'en-tête Vary.</description>
+<description>Active la politique de filtrage de l'en-tête Vary.</description>
<syntax>PolicyVary <var>ignore|log|enforce</var> <var>header</var> [ <var>header</var> [ ... ]]</syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse dont l'en-tête
- <code>Vary</code> contient un des en-têtes spécifiés sera rejetée.</p>
+ <p>Avec l'argument enforce, une réponse dont l'en-tête
+ <code>Vary</code> contient un des en-têtes spécifiés sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet suite à la présence de l'en-tête "User-Agent" dans l'en-tête
+# rejet suite à la présence de l'en-tête "User-Agent" dans l'en-tête
# Vary
PolicyVary enforce User-Agent
</highlight>
<name>PolicyVaryURL</name>
<description>URL contenant la description de la politique de filtrage de
-l'en-tête Vary.</description>
+l'en-tête Vary.</description>
<syntax>PolicyVaryURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique de filtrage de l'en-tête Vary ; elle
- apparaîtra dans les messages d'erreur.</p>
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique de filtrage de l'en-tête Vary ; elle
+ apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui ne contient ni en-tête
- <code>ETag</code> valide, ni en-tête <code>Last-Modified</code>, ou
- dont la syntaxe d'un de ces deux en-têtes est incorrecte sera
- rejetée.</p>
+ <p>Avec l'argument enforce, une réponse qui ne contient ni en-tête
+ <code>ETag</code> valide, ni en-tête <code>Last-Modified</code>, ou
+ dont la syntaxe d'un de ces deux en-têtes est incorrecte sera
+ rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet suite à l'absence des en-têtes Etag et/ou Last-Modified
+# rejet suite à l'absence des en-têtes Etag et/ou Last-Modified
PolicyValidation enforce
</highlight>
</example>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
+ <p>Cette directive permet de spécifier l'URL contenant la
description de la politique de filtrage de la validation du contenu
- ; elle apparaîtra dans les messages d'erreur.</p>
+ ; elle apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>PolicyNocache</name>
-<description>Active le filtrage des réponses qui se définissent
-elles-mêmes comme impossibles à mettre en cache.</description>
+<description>Active le filtrage des réponses qui se définissent
+elles-mêmes comme impossibles à mettre en cache.</description>
<syntax>PolicyNocache <var>ignore|log|enforce</var></syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse qui se définit elle-même
- comme impossible à mettre en cache via l'en-tête
- <code>Cache-Control</code> ou <code>Pragma</code> sera rejetée.</p>
+ <p>Avec l'argument enforce, une réponse qui se définit elle-même
+ comme impossible à mettre en cache via l'en-tête
+ <code>Cache-Control</code> ou <code>Pragma</code> sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# une réponse contenant l'en-tête Cache-Control: no-cache sera
-# rejetée
+# une réponse contenant l'en-tête Cache-Control: no-cache sera
+# rejetée
PolicyNocache enforce
</highlight>
</example>
<name>PolicyNocacheURL</name>
<description>URL contenant la description de la politique de filtrage
-des réponses qui se définissent elles-mêmes comme impossibles à mettre
+des réponses qui se définissent elles-mêmes comme impossibles à mettre
en cache.</description>
<syntax>PolicyNocacheURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique de filtrage des réponses qui se
- définissent elles-mêmes comme impossibles à mettre en cache ; elle
- apparaîtra dans les messages d'erreur.</p>
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique de filtrage des réponses qui se
+ définissent elles-mêmes comme impossibles à mettre en cache ; elle
+ apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>PolicyMaxage</name>
-<description>Active le filtrage de la durée de vie des réponses.</description>
+<description>Active le filtrage de la durée de vie des réponses.</description>
<syntax>PolicyMaxage <var>ignore|log|enforce</var> <var>age</var></syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une réponse dont la durée de vie n'est
- pas explicitement spécifiée via un en-tête <code>max-age</code>,
- <code>s-maxage</code> ou <code>Expires</code>, ou dont la durée de
- vie est inférieure à la valeur donnée sera rejetée.</p>
+ <p>Avec l'argument enforce, une réponse dont la durée de vie n'est
+ pas explicitement spécifiée via un en-tête <code>max-age</code>,
+ <code>s-maxage</code> ou <code>Expires</code>, ou dont la durée de
+ vie est inférieure à la valeur donnée sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet des réponses dont la durée de vie est inférieure à une
-# journée
+# rejet des réponses dont la durée de vie est inférieure à une
+# journée
PolicyMaxage enforce 86400
</highlight>
</example>
<name>PolicyMaxageURL</name>
<description>URL contenant la description de la politique de filtrage
-des réponses en fonction de leur durée de vie.</description>
+des réponses en fonction de leur durée de vie.</description>
<syntax>PolicyMaxageURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique de filtrage des réponses en fonction de
- leur durée de vie ; elle apparaîtra dans les messages d'erreur.</p>
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique de filtrage des réponses en fonction de
+ leur durée de vie ; elle apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>PolicyVersion</name>
-<description>Active le filtrage des requêtes en fonction du numéro de
+<description>Active le filtrage des requêtes en fonction du numéro de
version HTTP.</description>
<syntax>PolicyVersion <var>ignore|log|enforce</var> <var>HTTP/0.9|HTTP/1.0|HTTP/1.1</var></syntax>
<default>ignore</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Avec l'argument enforce, une requête dont le numéro de version
- HTTP est inférieur à la valeur spécifiée sera rejetée.</p>
+ <p>Avec l'argument enforce, une requête dont le numéro de version
+ HTTP est inférieur à la valeur spécifiée sera rejetée.</p>
<example><title>Exemple</title>
<highlight language="config">
-# rejet des requêtes dont le numéro de version HTTP est inférieur à
+# rejet des requêtes dont le numéro de version HTTP est inférieur à
# HTTP/1.1
PolicyVersion enforce HTTP/1.1
</highlight>
<name>PolicyVersionURL</name>
<description>URL contenant la description de la politique de filtrage
-des requêtes en fonction du numéro de version HTTP.</description>
+des requêtes en fonction du numéro de version HTTP.</description>
<syntax>PolicyVersionURL <var>url</var></syntax>
<default>none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
-<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
- <p>Cette directive permet de spécifier l'URL contenant la
- description de la politique de filtrage des requêtes en fonction du
- numéro de version HTTP ; elle apparaîtra dans les messages d'erreur.</p>
+ <p>Cette directive permet de spécifier l'URL contenant la
+ description de la politique de filtrage des requêtes en fonction du
+ numéro de version HTTP ; elle apparaîtra dans les messages d'erreur.</p>
</usage>
</directivesynopsis>
</summary>
<seealso><module>mod_proxy</module></seealso>
-<section id="notes"><title>Informations sur les requêtes</title>
+<section id="notes"><title>Informations sur les requêtes</title>
<p><module>mod_proxy_connect</module> enregistre les informations
suivantes pour journalisation via le format <code>%{NOMVAR}n</code>
dans les directives <directive
</p>
<dl>
<dt>proxy-source-port</dt>
- <dd>Le port local utilisé pour la connexion vers le serveur
- d'arrière-plan.</dd>
+ <dd>Le port local utilisé pour la connexion vers le serveur
+ d'arrière-plan.</dd>
</dl>
<p>Les requêtes avec méthode CONNECT sont traitées dans les sections
toutes les 30 secondes). Utilise la syntaxe <a
href="directive-dict.html#Syntax">time-interval</a>.</td></tr>
<tr><td>hcuri</td>
- <td> </td>
+ <td> </td>
<td>URI supplémentaire à ajouter à l'URL de l'équipier pour le check up.</td></tr>
<tr><td>hctemplate</td>
- <td> </td>
+ <td> </td>
<td>Nom du modèle créé via <directive module="mod_proxy_hcheck">ProxyHCTemplate</directive> à
utiliser pour définir les paramètres de check up de cet équipier</td></tr>
<tr><td>hcexpr</td>
- <td> </td>
+ <td> </td>
<td>Nom de l'expression créée via <directive module="mod_proxy_hcheck">ProxyHCExpr</directive>
utilisée pour analyser les en-têtes de la réponse du check up.<br/>
<em>Si ce paramètre est absent, un état HTTP de 2xx à 3xx est
<modulesynopsis metafile="mod_proxy_http.xml.meta">
<name>mod_proxy_http</name>
-<description>Module fournissant le support HTTP à
+<description>Module fournissant le support HTTP à
<module>mod_proxy</module></description>
<status>Extension</status>
<sourcefile>mod_proxy_http.c</sourcefile>
<summary>
<p>Pour pouvoir fonctionner, ce module <em>requiert</em> le
chargement de <module>mod_proxy</module>. Il fournit le support du
- mandatement des requêtes HTTP et HTTPS. <module>mod_proxy_http</module>
+ mandatement des requêtes HTTP et HTTPS. <module>mod_proxy_http</module>
supporte HTTP/0.9, HTTP/1.0 et HTTP/1.1. Il ne fournit
- <em>aucune</em> fonctionnalité de mise en cache. Si vous souhaitez
+ <em>aucune</em> fonctionnalité de mise en cache. Si vous souhaitez
mettre en oeuvre un mandataire qui assure aussi les fonctions de
mise en cache, vous devez utiliser les services du module
<module>mod_cache</module>.</p>
- <p>Ainsi, pour pouvoir traiter les requêtes HTTP mandatées,
+ <p>Ainsi, pour pouvoir traiter les requêtes HTTP mandatées,
<module>mod_proxy</module>, et <module>mod_proxy_http</module>
- doivent être chargés dans le serveur.</p>
+ doivent être chargés dans le serveur.</p>
<note type="warning"><title>Avertissement</title>
- <p>N'activez pas la fonctionnalité de mandataire avant d'avoir <a
- href="mod_proxy.html#access">sécurisé votre serveur</a>. Les
+ <p>N'activez pas la fonctionnalité de mandataire avant d'avoir <a
+ href="mod_proxy.html#access">sécurisé votre serveur</a>. Les
serveurs mandataires ouverts sont dangereux non seulement pour
- votre réseau, mais aussi pour l'Internet au sens large.</p>
+ votre réseau, mais aussi pour l'Internet au sens large.</p>
</note>
</summary>
<seealso><module>mod_proxy</module></seealso>
<seealso><module>mod_proxy_connect</module></seealso>
<section id="env"><title>Variables d'environnement</title>
- <p>Outre les directives de configuration qui contrôlent le
+ <p>Outre les directives de configuration qui contrôlent le
comportement de <module>mod_proxy</module>, plusieurs <dfn>variables
- d'environnement</dfn> permettent de contrôler le fournisseur du
+ d'environnement</dfn> permettent de contrôler le fournisseur du
protocole HTTP. Parmi les variables suivantes, celle qui ne
- nécessitent pas de valeur particulière sont définies quelle que soit
+ nécessitent pas de valeur particulière sont définies quelle que soit
la valeur qu'on leur affecte.</p>
<dl>
<dt>proxy-sendextracrlf</dt>
<dd>Provoque l'envoi par le mandataire d'une nouvelle ligne
- CR-LF supplémentaire à la fin de la requête.
+ CR-LF supplémentaire à la fin de la requête.
Ceci constitue un
moyen de contournement d'une bogue de certains
navigateurs.</dd>
<dt>force-proxy-request-1.0</dt>
- <dd>Force le mandataire à envoyer des requêtes vers le serveur
- cible selon le protocole HTTP/1.0 et désactive les
- fonctionnalités propres à HTTP/1.1.</dd>
+ <dd>Force le mandataire à envoyer des requêtes vers le serveur
+ cible selon le protocole HTTP/1.0 et désactive les
+ fonctionnalités propres à HTTP/1.1.</dd>
<dt>proxy-nokeepalive</dt>
- <dd>Force le mandataire à fermer la connexion avec le serveur
- cible après chaque requête.</dd>
+ <dd>Force le mandataire à fermer la connexion avec le serveur
+ cible après chaque requête.</dd>
<dt>proxy-chain-auth</dt>
<dd>Si le mandataire requiert une authentification, il va lire
- et exploiter les données d'authentification pour mandataire
- envoyées par le client. Si <var>proxy-chain-auth</var> est
- définie, il va <em>aussi</em> faire suivre ces données vers le
- mandataire suivant dans la chaîne. Ceci peut s'avérer nécessaire
- si une chaîne de mandataires partagent les informations
+ et exploiter les données d'authentification pour mandataire
+ envoyées par le client. Si <var>proxy-chain-auth</var> est
+ définie, il va <em>aussi</em> faire suivre ces données vers le
+ mandataire suivant dans la chaîne. Ceci peut s'avérer nécessaire
+ si une chaîne de mandataires partagent les informations
d'authentification.
- <strong>Avertissement concernant la sécurité :</strong>
- Ne définissez cette variable que si vous êtes sûr d'en avoir
+ <strong>Avertissement concernant la sécurité :</strong>
+ Ne définissez cette variable que si vous êtes sûr d'en avoir
besoin, car elle peut provoquer la divulgation d'informations
sensibles !</dd>
<dt>proxy-sendcl</dt>
- <dd>Avec HTTP/1.0, toutes les requêtes qui possèdent un corps
- (par exemple les requêtes POST) doivent comporter un en-tête
+ <dd>Avec HTTP/1.0, toutes les requêtes qui possèdent un corps
+ (par exemple les requêtes POST) doivent comporter un en-tête
<var>Content-Length</var>. Cette variable d'environnement force
- le mandataire Apache à envoyer cet en-tête au serveur cible,
- sans tenir compte de ce que lui a envoyé le client. Ceci permet
- d'assurer la compatibilité lorsqu'on mandate un serveur cible
+ le mandataire Apache à envoyer cet en-tête au serveur cible,
+ sans tenir compte de ce que lui a envoyé le client. Ceci permet
+ d'assurer la compatibilité lorsqu'on mandate un serveur cible
mettant en oeuvre un protocole de type HTTP/1.0 ou inconnu. Elle
- peut cependant nécessiter la mise en tampon de l'intégralité de
- la requête par le mandataire, ce qui s'avère très inefficace
- pour les requêtes de grande taille.</dd>
+ peut cependant nécessiter la mise en tampon de l'intégralité de
+ la requête par le mandataire, ce qui s'avère très inefficace
+ pour les requêtes de grande taille.</dd>
<dt>proxy-sendchunks ou proxy-sendchunked</dt>
- <dd>Cette variable constitue l'opposé de
+ <dd>Cette variable constitue l'opposé de
<var>proxy-sendcl</var>. Elle permet la transmission des corps
- de requêtes vers le serveur cible en utilisant un codage de
- transfert fractionné. Ceci permet une transmission des requêtes
- plus efficace, mais nécessite que le serveur cible supporte le
+ de requêtes vers le serveur cible en utilisant un codage de
+ transfert fractionné. Ceci permet une transmission des requêtes
+ plus efficace, mais nécessite que le serveur cible supporte le
protocole HTTP/1.1.</dd>
<dt>proxy-interim-response</dt>
<dd>Cette variable peut prendre les valeurs <code>RFC</code>
- (valeur par défaut) ou
- <code>Suppress</code>. Les versions précédentes de httpd
- supprimaient les réponses intermédiaires HTTP (1xx) envoyées par
+ (valeur par défaut) ou
+ <code>Suppress</code>. Les versions précédentes de httpd
+ supprimaient les réponses intermédiaires HTTP (1xx) envoyées par
le serveur cible. En pratique, si un serveur cible envoie une
- réponse intermédiaire, il se peut qu'il étende lui-même le
- protocole d'une manière dont nous n'avons pas connaissance, ou
+ réponse intermédiaire, il se peut qu'il étende lui-même le
+ protocole d'une manière dont nous n'avons pas connaissance, ou
tout simplement non conforme. Le comportement du mandataire est
- donc maintenant configurable : définissez
- <code>proxy-interim-response RFC</code> pour être totalement
+ donc maintenant configurable : définissez
+ <code>proxy-interim-response RFC</code> pour être totalement
compatible avec le protocole, ou <code>proxy-interim-response
- Suppress</code> pour supprimer les réponses intermédiaires.</dd>
+ Suppress</code> pour supprimer les réponses intermédiaires.</dd>
<dt>proxy-initial-not-pooled</dt>
- <dd>Si cette variable est définie, aucune connexion faisant
- partie d'un jeu ne sera réutilisée si la requête
- du client est la requête initiale pour une connexion.
- Ceci permet d'éviter le message d'erreur
- "proxy: error reading status line from remote server" causé par
- la situation de compétition au cours de laquelle le serveur
- cible ferme la connexion du jeu après la vérification de la
- connexion par le mandataire, et avant que les données envoyées
+ <dd>Si cette variable est définie, aucune connexion faisant
+ partie d'un jeu ne sera réutilisée si la requête
+ du client est la requête initiale pour une connexion.
+ Ceci permet d'éviter le message d'erreur
+ "proxy: error reading status line from remote server" causé par
+ la situation de compétition au cours de laquelle le serveur
+ cible ferme la connexion du jeu après la vérification de la
+ connexion par le mandataire, et avant que les données envoyées
par le mandataire n'atteignent le serveur cible. Il faut
- cependant garder à l'esprit que la définition de cette variable
- dégrade les performances, particulièrement avec les clients
+ cependant garder à l'esprit que la définition de cette variable
+ dégrade les performances, particulièrement avec les clients
HTTP/1.0.
</dd>
</dl>
</section>
-<section id="notes"><title>Informations sur les requêtes</title>
+<section id="notes"><title>Informations sur les requêtes</title>
<p><module>mod_proxy_http</module> enregistre les informations
suivantes pour journalisation via le format <code>%{NOMVAR}n</code>
dans les directives <directive
</p>
<dl>
<dt>proxy-source-port</dt>
- <dd>Le port local utilisé pour la connexion vers le serveur
- d'arrière-plan.</dd>
+ <dd>Le port local utilisé pour la connexion vers le serveur
+ d'arrière-plan.</dd>
<dt>proxy-status</dt>
- <dd>Le code d'état HTTP reçu du serveur d'arrière-plan.</dd>
+ <dd>Le code d'état HTTP reçu du serveur d'arrière-plan.</dd>
</dl>
</section>
<summary>
<p><module>mod_proxy_http2</module> ne
- supporte que HTTP/2 et ne permet pas de rétrogradation vers HTTP/1.1. Cela
- signifie que le serveur d'arrière-plan doit supporter HTTP/2 car HTTP/1.1 ne
- pourra alors pas être utilisé.</p>
+ supporte que HTTP/2 et ne permet pas de rétrogradation vers HTTP/1.1. Cela
+ signifie que le serveur d'arrière-plan doit supporter HTTP/2 car HTTP/1.1 ne
+ pourra alors pas être utilisé.</p>
- <p>Ce module <em>nécessite</em> la présence de <module>mod_proxy</module> ;
- pour pouvoir traiter les requêtes mandatées HTTP/2,
+ <p>Ce module <em>nécessite</em> la présence de <module>mod_proxy</module> ;
+ pour pouvoir traiter les requêtes mandatées HTTP/2,
<module>mod_proxy</module> et <module>mod_proxy_http2</module> doivent donc
- être chargés par le serveur.</p>
+ être chargés par le serveur.</p>
- <p><module>mod_proxy_http2</module> travaille avec des requêtes entrantes en
- HTTP/1.1 ou HTTP/2. Dans les deux cas, les requêtes vers le même serveur
- d'arrière-plan sont envoyées
+ <p><module>mod_proxy_http2</module> travaille avec des requêtes entrantes en
+ HTTP/1.1 ou HTTP/2. Dans les deux cas, les requêtes vers le même serveur
+ d'arrière-plan sont envoyées
via une seule connexion TCP, dans la mesure du possible (autrement dit
- lorsque la connexion peut être réutilisée).</p>
+ lorsque la connexion peut être réutilisée).</p>
- <p>Avertissement : il ne sera effectué aucune tentative de fusion de
- plusieurs requêtes entrantes HTTP/1 (devant être mandatées vers le même
- serveur d'arrière-plan) vers des flux HTTP/2 appartenant à la même requête
- HTTP/2. Chaque requête HTTP/1 entrante sera mandatée vers le serveur
- d'arrière-plan en utilisant une requête HTTP/2 séparée (tout en réutilisant
- si possible la même connexion TCP).</p>
+ <p>Avertissement : il ne sera effectué aucune tentative de fusion de
+ plusieurs requêtes entrantes HTTP/1 (devant être mandatées vers le même
+ serveur d'arrière-plan) vers des flux HTTP/2 appartenant à la même requête
+ HTTP/2. Chaque requête HTTP/1 entrante sera mandatée vers le serveur
+ d'arrière-plan en utilisant une requête HTTP/2 séparée (tout en réutilisant
+ si possible la même connexion TCP).</p>
<p>Ce module s'appuie sur <a href="http://nghttp2.org/">libnghttp2</a> pour
fournir le moteur central http/2.</p>
<note type="warning"><title>Avertissement</title> <p>Ce module en est au
- stade expérimental. Ses comportement, directives et valeurs par défauts sont
- donc susceptibles de modifications d'une version à l'autre plus fréquentes
- que pour les autres modules. A ce titre, il est fortement conseillé aux
+ stade expérimental. Ses comportement, directives et valeurs par défauts sont
+ donc susceptibles de modifications d'une version à l'autre plus fréquentes
+ que pour les autres modules. A ce titre, il est fortement conseillé aux
utilisateurs de consulter le fichier "CHANGES" pour prendre connaissance de
ces modifications.</p> </note>
<note type="warning"><title>Avertissement</title>
<p>N'activez pas le mandatement avant d'avoir <a
- href="mod_proxy.html#access">sécurisé votre serveur</a>. Les serveurs
- mandataires ouverts sont dangereux non seulement pour votre propre réseau,
+ href="mod_proxy.html#access">sécurisé votre serveur</a>. Les serveurs
+ mandataires ouverts sont dangereux non seulement pour votre propre réseau,
mais aussi pour l'Internet au sens large.</p>
</note>
</summary>
<section id="examples"><title>Exemples de base</title>
<p>Les exemples ci-dessous montrent comment configurer HTTP/2 pour des
- connexions d'arrière-plan vers un mandataire inverse.</p>
+ connexions d'arrière-plan vers un mandataire inverse.</p>
<example><title>HTTP/2 (TLS)</title>
<highlight language="config">
</highlight>
</example>
- <example><title>HTTP/2 (non sécurisé)</title>
+ <example><title>HTTP/2 (non sécurisé)</title>
<highlight language="config">
ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"
<note>
<p>Pour mandater en inverse les protocoles <code>h2</code> ou
<code>h2c</code>, on utilise la directive
- <directive>ProxyPassReverse</directive> avec les schèmes habituels
+ <directive>ProxyPassReverse</directive> avec les schèmes habituels
<code>https</code> et respectivement
- <code>http</code> qui sont connus et utilisés par l'agent utilisateur.</p>
+ <code>http</code> qui sont connus et utilisés par l'agent utilisateur.</p>
</note>
</section> <!-- /examples -->
-<section id="notes"><title>Informations sur les requêtes</title>
- <p><module>mod_proxy_http</module> fournit les informations sur les requêtes
+<section id="notes"><title>Informations sur les requêtes</title>
+ <p><module>mod_proxy_http</module> fournit les informations sur les requêtes
suivantes pour enregistrement dans les journaux en utilisant le format
<code>%{VARNAME}n</code> avec les directives <directive
module="mod_log_config">LogFormat</directive> ou <directive
</p>
<dl>
<dt>proxy-source-port</dt>
- <dd>Le numéro de port local utilisé pour la connexion vers le serveur
- d'arrière-plan.</dd>
+ <dd>Le numéro de port local utilisé pour la connexion vers le serveur
+ d'arrière-plan.</dd>
<dt>proxy-status</dt>
- <dd>Le statut HTTP/2 en provenance du serveur d'arrière-plan.</dd>
+ <dd>Le statut HTTP/2 en provenance du serveur d'arrière-plan.</dd>
</dl>
</section>
<modulesynopsis metafile="mod_ssl_ct.xml.meta">
<name>mod_ssl_ct</name>
-<description>Implémentation de la transparence des certificats
+<description>Implémentation de la transparence des certificats
(Certificat Transparency - RFC 6962)
</description>
<status>Extension</status>
<summary>
-<p>Ce module implémente la transparence des certificats en conjonction
+<p>Ce module implémente la transparence des certificats en conjonction
avec <module>mod_ssl</module> et les outils en ligne de commande du
projet open source <a
href="https://code.google.com/p/certificate-transparency/">certificate-transparency</a>.
-Le but de la transparence des certificats consiste à révéler
-l'utilisation de certificats de confiance délivrés par
-erreur ou dans un but malintentionné. Vous trouverez plus de détails à
+Le but de la transparence des certificats consiste à révéler
+l'utilisation de certificats de confiance délivrés par
+erreur ou dans un but malintentionné. Vous trouverez plus de détails à
propos de la transparence des certificats ici : <a
href="http://www.certificate-transparency.org/">http://www.certificate-transparency.org/</a>.
-Voici la signification des termes utilisés dans cette documentation :</p>
+Voici la signification des termes utilisés dans cette documentation :</p>
<dl>
<dt>Certificate log</dt>
- <dd>Un Certificate log, auquel on fera référence avec le simple
- terme <q>log</q> tout au long de ce document, est un service réseau
+ <dd>Un Certificate log, auquel on fera référence avec le simple
+ terme <q>log</q> tout au long de ce document, est un service réseau
auquel les certificats de serveurs sont soumis. Un agent
- utilisateur peut vérifier que le certificat d'un serveur auquel il
- accède a bien été soumis à un log auquel il fait confiance, et que le log
- lui-même n'a pas rencontré de problème avec ce certificat.</dd>
+ utilisateur peut vérifier que le certificat d'un serveur auquel il
+ accède a bien été soumis à un log auquel il fait confiance, et que le log
+ lui-même n'a pas rencontré de problème avec ce certificat.</dd>
- <dt>Horodatage signé du certificat (Signed Certificate Timestamp - SCT)</dt>
+ <dt>Horodatage signé du certificat (Signed Certificate Timestamp - SCT)</dt>
<dd>Il s'agit d'une information en provenance d'un log indiquant qu'il
- a validé un certificat. Cet horodatage est signé avec la clé publique
- du log. Un ou plusieurs SCTs sont passés au client durant la phase de
- négociation de la connexion, soit dans le ServerHello (extension TLS),
- soit dans l'extension du certificat, soit dans une réponse OCSP
+ a validé un certificat. Cet horodatage est signé avec la clé publique
+ du log. Un ou plusieurs SCTs sont passés au client durant la phase de
+ négociation de la connexion, soit dans le ServerHello (extension TLS),
+ soit dans l'extension du certificat, soit dans une réponse OCSP
jointe.</dd>
</dl>
-<p>Cette implémentation pour Apache httpd fournit les fonctionnalités
+<p>Cette implémentation pour Apache httpd fournit les fonctionnalités
suivantes pout les serveurs et mandataires TLS :</p>
<ul>
- <li>Les SCTs peuvent être extraits automatiquement des logs, et en
- conjonction avec tout SCT défini statiquement, envoyés aux clients
- qui les supportent durant la phase ServerHello de la négociation de la
+ <li>Les SCTs peuvent être extraits automatiquement des logs, et en
+ conjonction avec tout SCT défini statiquement, envoyés aux clients
+ qui les supportent durant la phase ServerHello de la négociation de la
connexion.</li>
<li>Le serveur mandataire peut recevoir les SCTs en provenance du
serveur original au cours de la phase ServerHello sous la forme d'une
- extension de certificat, et/ou au sein des réponses OCSP agrafées ;
- tout SCT reçu peut être validé partiellement en ligne, et
- éventuellement mis en file d'attente pour un examen plus approfondi
+ extension de certificat, et/ou au sein des réponses OCSP agrafées ;
+ tout SCT reçu peut être validé partiellement en ligne, et
+ éventuellement mis en file d'attente pour un examen plus approfondi
hors ligne.</li>
- <li>Le serveur mandataire peut être configuré de façon à refuser la
+ <li>Le serveur mandataire peut être configuré de façon à refuser la
communication avec un serveur original qui ne fournit pas de SCT
- pouvant âtre validé en ligne.</li>
+ pouvant âtre validé en ligne.</li>
</ul>
-<p>La configuration des logs peut être définie statiquement au niveau de
-la configuration du serveur web, ou enregistrée dans une base de données
-SQLite3. Dans ce dernier cas, <module>mod_ssl_ct</module> rechargera à
-intervalles réguliers la base de données, de façon à ce que tout
+<p>La configuration des logs peut être définie statiquement au niveau de
+la configuration du serveur web, ou enregistrée dans une base de données
+SQLite3. Dans ce dernier cas, <module>mod_ssl_ct</module> rechargera à
+intervalles réguliers la base de données, de façon à ce que tout
changement dans la configuration de la maintenance et de la propagation
-des logs pour un site spécifique ne nécessite pas de redémarrer httpd.</p>
+des logs pour un site spécifique ne nécessite pas de redémarrer httpd.</p>
-<note>Ce module en est au stade expérimental pour les raisons suivantes
+<note>Ce module en est au stade expérimental pour les raisons suivantes
:
<ul>
<li>Tests et retours d'information insuffisants</li>
<li>Repose sur une version non stable (version 1.0.2, Beta 3 ou
- supérieure) d'OpenSSL pour les
- opérations de base</li>
- <li>Implémentation de la <a href="#audit">fonctionnalité d'audit hors
- ligne</a> incomplète</li>
+ supérieure) d'OpenSSL pour les
+ opérations de base</li>
+ <li>Implémentation de la <a href="#audit">fonctionnalité d'audit hors
+ ligne</a> incomplète</li>
</ul>
-<p>Les mécanismes de configuration, le format des données enregistrées
-pour l'audit hors ligne, ainsi que d'autres caractéristiques sont
-appelés à évoluer en fonction des tests et retours d'informations à
+<p>Les mécanismes de configuration, le format des données enregistrées
+pour l'audit hors ligne, ainsi que d'autres caractéristiques sont
+appelés à évoluer en fonction des tests et retours d'informations à
venir.</p>
</note>
</summary>
<title>Vue d'ensemble du fonctionnement au niveau du serveur</title>
<p>Les serveurs doivent pouvoir envoyer les SCTs aux clients. Les SCTs
- seront envoyés sous la forme d'une extension de certificat ou au sein
- d'une réponse OCSP agrafée sans logique préprogrammée. Ce module gère
- l'envoi des SCTs configurés par l'administrateur ou en provenance des
- logs définis.</p>
+ seront envoyés sous la forme d'une extension de certificat ou au sein
+ d'une réponse OCSP agrafée sans logique préprogrammée. Ce module gère
+ l'envoi des SCTs configurés par l'administrateur ou en provenance des
+ logs définis.</p>
- <p>Le nombre de SCTs envoyés au cours de la phase ServerHello (c'est à
+ <p>Le nombre de SCTs envoyés au cours de la phase ServerHello (c'est à
dire les SCTs autres que ceux inclus dans une extension de certificat
- ou une réponse OCSP agrafée) peut être limité via la directive
+ ou une réponse OCSP agrafée) peut être limité via la directive
<directive module="mod_ssl_ct">CTServerHelloSCTLimit</directive>.</p>
<p>Pour chaque certificat de serveur, un processus maintient une liste
- de SCTs à envoyer au cours de la phase ServerHello ; cette liste est
- créée à partir des SCTs configurés statiquement, mais aussi à partir
- de ceux reçus depuis les logs. Les logs marqués comme suspects ou
- arrivés à péremption seront ignorés. A intervalles réguliers, le
- processus va soumettre les certificats à un log selon les besoins
- (suite à un changement de configuration du log ou de sa durée de vie),
- et reconstruire la concaténation des SCTs.</p>
-
- <p>La liste des SCTs pour un certificat de serveur sera envoyée au
+ de SCTs à envoyer au cours de la phase ServerHello ; cette liste est
+ créée à partir des SCTs configurés statiquement, mais aussi à partir
+ de ceux reçus depuis les logs. Les logs marqués comme suspects ou
+ arrivés à péremption seront ignorés. A intervalles réguliers, le
+ processus va soumettre les certificats à un log selon les besoins
+ (suite à un changement de configuration du log ou de sa durée de vie),
+ et reconstruire la concaténation des SCTs.</p>
+
+ <p>La liste des SCTs pour un certificat de serveur sera envoyée au
cours de la phase ClientHello, lorsque ce certificat de serveur
- particulier est utilisé, à tout client qui fait savoir qu'il supporte
- cette fonctionnalité.</p>
+ particulier est utilisé, à tout client qui fait savoir qu'il supporte
+ cette fonctionnalité.</p>
</section>
<p>Le serveur mandataire indique qu'il supporte la Transparence des
Certificats au cours de la phase ClientHello en incluant l'extension
- <em>signed_certificate_timestamp</em>. Il peut reconnaître les SCTs
- reçus au cours de la phase ServerHello dans une extension du
- certificat du serveur original, ou au sein d'une réponse OCSP agrafée.</p>
+ <em>signed_certificate_timestamp</em>. Il peut reconnaître les SCTs
+ reçus au cours de la phase ServerHello dans une extension du
+ certificat du serveur original, ou au sein d'une réponse OCSP agrafée.</p>
- <p>Une vérification en ligne est effectuée pour tout SCT reçu :</p>
+ <p>Une vérification en ligne est effectuée pour tout SCT reçu :</p>
<ul>
- <li>Le repère de temps de chaque SCT peut être vérifié pour voir
+ <li>Le repère de temps de chaque SCT peut être vérifié pour voir
s'il n'est pas encore valide en le comparant avec l'heure actuelle
- ou tout intervalle de temps valide défini pour le log.</li>
- <li>Dans le cas d'un SCT issu d'un log pour lequel une clé publique
- a été définie, la signature du serveur sera vérifiée.</li>
+ ou tout intervalle de temps valide défini pour le log.</li>
+ <li>Dans le cas d'un SCT issu d'un log pour lequel une clé publique
+ a été définie, la signature du serveur sera vérifiée.</li>
</ul>
- <p>Si la vérification échoue ou renvoie un résultat négatif pour au
+ <p>Si la vérification échoue ou renvoie un résultat négatif pour au
moins un SCT et si la directive <directive
- module="mod_ssl_ct">CTProxyAwareness</directive> est définie à
- <em>require</em>, la tentative de connexion est abandonnée.</p>
+ module="mod_ssl_ct">CTProxyAwareness</directive> est définie à
+ <em>require</em>, la tentative de connexion est abandonnée.</p>
<p>En outre, si la directive <directive
- module="mod_ssl_ct">CTAuditStorage</directive> est définie, la chaîne
- de certification du serveur et les SCTs sont stockés pour une
- vérification hors ligne.</p>
-
- <p>A titre d'optimisation, la vérification en ligne et le stockage des
- données en provenance du serveur ne sont effectués que la première
- fois où un processus enfant du serveur web reçoit ces données, ce qui
- permet d'économiser du temps processeur et de l'espace disque. Dans le
+ module="mod_ssl_ct">CTAuditStorage</directive> est définie, la chaîne
+ de certification du serveur et les SCTs sont stockés pour une
+ vérification hors ligne.</p>
+
+ <p>A titre d'optimisation, la vérification en ligne et le stockage des
+ données en provenance du serveur ne sont effectués que la première
+ fois où un processus enfant du serveur web reçoit ces données, ce qui
+ permet d'économiser du temps processeur et de l'espace disque. Dans le
cas d'une configuration typique de mandataire inverse, seule une
- légère augmentation de la charge processeur sera induite.</p>
+ légère augmentation de la charge processeur sera induite.</p>
</section>
<title>Configuration du log</title>
<p>Les serveurs et les mandataires utilisent des informations
- différentes en ce qui concerne les logs et leurs traitements. Cette
- <em>configuration des logs</em> peut être effectuée de deux manières :</p>
+ différentes en ce qui concerne les logs et leurs traitements. Cette
+ <em>configuration des logs</em> peut être effectuée de deux manières :</p>
<ul>
- <li>On peut créer une base de données pour configurer le log en
+ <li>On peut créer une base de données pour configurer le log en
utilisant la commande <program>ctlogconfig</program> et en
- définissant le chemin vers cette base de données via la directive
+ définissant le chemin vers cette base de données via la directive
<directive module="mod_ssl_ct">CTLogConfig</directive>.
- <module>mod_ssl_ct</module> relit la base de données à
- intervalles réguliers ; cette méthode de configuration supporte donc
- les mises à jour dynamiques. En outre, la commande d'audit hors
+ <module>mod_ssl_ct</module> relit la base de données à
+ intervalles réguliers ; cette méthode de configuration supporte donc
+ les mises à jour dynamiques. En outre, la commande d'audit hors
ligne <code>ctauditscts</code> peut utiliser cette configuration pour
trouver l'URL des logs.</li>
<li>On peut aussi configurer les logs statiquement via la directive
<directive module="mod_ssl_ct">CTStaticLogConfig</directive>. Toute
- modification de cette directive nécessitera alors un redémarrage du serveur
- pour être prise en compte, comme pour toutes les autres directives.</li>
+ modification de cette directive nécessitera alors un redémarrage du serveur
+ pour être prise en compte, comme pour toutes les autres directives.</li>
</ul>
- <p>Les éléments de configuration pouvant être définis par l'une ou
- l'autre méthode sont les suivants :</p>
+ <p>Les éléments de configuration pouvant être définis par l'une ou
+ l'autre méthode sont les suivants :</p>
<dl>
<dt>Identifiant du log</dt>
- <dd>L'identifiant du log est le hash SHA-256 de sa clé publique, et
- est inclus dans tout SCT. Ceci permet d'identifier aisément un log
- particulier lorsqu'on définit des plages de repères de temps
+ <dd>L'identifiant du log est le hash SHA-256 de sa clé publique, et
+ est inclus dans tout SCT. Ceci permet d'identifier aisément un log
+ particulier lorsqu'on définit des plages de repères de temps
valides ou certaines autres informations.</dd>
- <dt>Clé publique du log</dt>
- <dd>Un mandataire doit disposer de la clé publique du log afin de
- pouvoir vérifier la signature dans les SCTs en provenance de ce log.
+ <dt>Clé publique du log</dt>
+ <dd>Un mandataire doit disposer de la clé publique du log afin de
+ pouvoir vérifier la signature dans les SCTs en provenance de ce log.
<br />
- Un serveur doit posséder la clé publique du log afin de pouvoir lui
+ Un serveur doit posséder la clé publique du log afin de pouvoir lui
soumettre des certificats.</dd>
- <dt>Configuration générale confiance/méfiance</dt>
- <dd>Il s'agit d'un mécanisme permettant d'instaurer une méfiance ou
- de restaurer une confiance envers un log donné pour certaines
- raisons particulières (y compris la simple interruption des
- interactions avec le log dans les situations où il est hors ligne).</dd>
+ <dt>Configuration générale confiance/méfiance</dt>
+ <dd>Il s'agit d'un mécanisme permettant d'instaurer une méfiance ou
+ de restaurer une confiance envers un log donné pour certaines
+ raisons particulières (y compris la simple interruption des
+ interactions avec le log dans les situations où il est hors ligne).</dd>
- <dt>Repères de temps minima et/ou maxima valides</dt>
- <dd>Lorsqu'ils sont définis, le mandataire pourra vérifier que les
- repères de temps contenus dans les SCTs sont compris dans une plage
+ <dt>Repères de temps minima et/ou maxima valides</dt>
+ <dd>Lorsqu'ils sont définis, le mandataire pourra vérifier que les
+ repères de temps contenus dans les SCTs sont compris dans une plage
valide</dd>
<dt>URL du log</dt>
- <dd>Pour qu'un serveur puisse soumettre des certificats de serveur à
- un log, il doit connaître l'URL de ce dernier (pour son API). Le
+ <dd>Pour qu'un serveur puisse soumettre des certificats de serveur à
+ un log, il doit connaître l'URL de ce dernier (pour son API). Le
serveur soumettra chaque certificat de serveur afin d'obtenir un
- SCT pour chaque log dont l'URL est définie, sauf pour les logs aussi
- marqués comme non dignes de confiance ou si l'heure actuelle ne se
- situe dans aucune des plages de temps valides définies.
+ SCT pour chaque log dont l'URL est définie, sauf pour les logs aussi
+ marqués comme non dignes de confiance ou si l'heure actuelle ne se
+ situe dans aucune des plages de temps valides définies.
<br />
- L'audit hors ligne des SCTs reçus par un mandataire nécessite aussi
- de connaître l'URL du log.</dd>
+ L'audit hors ligne des SCTs reçus par un mandataire nécessite aussi
+ de connaître l'URL du log.</dd>
</dl>
- <p>En général, seuls quelque uns de ces éléments de configuration sont
- définis pour un log donné. Pour plus de détails, veuillez vous référer
- à la documentation de la directive <directive
+ <p>En général, seuls quelque uns de ces éléments de configuration sont
+ définis pour un log donné. Pour plus de détails, veuillez vous référer
+ à la documentation de la directive <directive
module="mod_ssl_ct">CTStaticLogConfig</directive> et de la commande
<program>ctlogconfig</program>.</p>
</section>
<section id="static">
- <title>Stockage des SCTs sous une forme compréhensible pour mod_ssl_ct</title>
+ <title>Stockage des SCTs sous une forme compréhensible pour mod_ssl_ct</title>
<p>Le module <module>mod_ssl_ct</module> permet de configurer les SCTs
- de manière statique via la directive
- <directive>CTStaticSCTs</directive>. Ils doivent alors être sous une forme
- binaire prête à être envoyée au client.</p>
+ de manière statique via la directive
+ <directive>CTStaticSCTs</directive>. Ils doivent alors être sous une forme
+ binaire prête à être envoyée au client.</p>
<p>Vous trouverez dans le <a
- href="https://github.com/tomrittervg/ct-tools">Dépôt ct-tools de Tom
+ href="https://github.com/tomrittervg/ct-tools">Dépôt ct-tools de Tom
Ritter</a> un exemple de code sous la forme d'un script Python
- (<code>write-sct.py</code>) permettant de générer un SCT sous un
- format correct avec des données en provenance d'un log.</p>
+ (<code>write-sct.py</code>) permettant de générer un SCT sous un
+ format correct avec des données en provenance d'un log.</p>
</section>
<section id="logging">
- <title>Journalisation des repères de temps des certificats (CT) dans
- le journal des accès</title>
+ <title>Journalisation des repères de temps des certificats (CT) dans
+ le journal des accès</title>
<p>Dans les deux modes mandataire et serveur, les variables
<code>SSL_CT_PROXY_STATUS</code> et
- <code>SSL_CT_CLIENT_STATUS</code> sont définies et indiquent si le
+ <code>SSL_CT_CLIENT_STATUS</code> sont définies et indiquent si le
serveur supporte les CTs.</p>
<p>Dans le mode mandataire, la variable
- <code>SSL_CT_PROXY_SCT_SOURCES</code> est définie pour indiquer si des
- SCTs ont été reçus ainsi que leur source (phase ServerHello de la
+ <code>SSL_CT_PROXY_SCT_SOURCES</code> est définie pour indiquer si des
+ SCTs ont été reçus ainsi que leur source (phase ServerHello de la
connexion, extension de certificat, etc...).</p>
- <p>Les valeurs de ces variables peuvent être journalisées via la
- chaîne de format <code>%{<em>varname</em>}e</code> de
+ <p>Les valeurs de ces variables peuvent être journalisées via la
+ chaîne de format <code>%{<em>varname</em>}e</code> de
<module>mod_log_config</module>.</p>
</section>
<section id="audit">
<title>Audit hors ligne pour mandataire</title>
- <p>Le support de cette fonctionnalité en est au stade expérimental, et
- est implémenté par la commande <code>ctauditscts</code>, qui repose
- elle-même sur l'utilitaire <code>verify_single_proof.py</code> du
+ <p>Le support de cette fonctionnalité en est au stade expérimental, et
+ est implémenté par la commande <code>ctauditscts</code>, qui repose
+ elle-même sur l'utilitaire <code>verify_single_proof.py</code> du
projet open source <em>certificate-transparency</em>. La commande
- <code>ctauditscts</code> peut parcourir des données, et ainsi effectuer
- un audit hors ligne (activé via la directive <directive
+ <code>ctauditscts</code> peut parcourir des données, et ainsi effectuer
+ un audit hors ligne (activé via la directive <directive
module="mod_ssl_ct">CTAuditStorage</directive>) en invoquant
l'utilitaire <code>verify_single_proof.py</code>.</p>
- <p>Voici quelques indication à l'état brut pour l'utilisation de
+ <p>Voici quelques indication à l'état brut pour l'utilisation de
<code>ctauditscts</code> :</p>
<ul>
- <li>Créez un <em>virtualenv</em> en utilisant le fichier
+ <li>Créez un <em>virtualenv</em> en utilisant le fichier
<code>requirements.txt</code> du projet
- <em>certificate-transparency</em>, et exécuter les étapes suivantes
- avec ce <em>virtualenv</em> activé.</li>
- <li>Définissez <code>PYTHONPATH</code> de façon à inclure le
- répertoire <code>python</code> dans les chemins par défaut des
+ <em>certificate-transparency</em>, et exécuter les étapes suivantes
+ avec ce <em>virtualenv</em> activé.</li>
+ <li>Définissez <code>PYTHONPATH</code> de façon à inclure le
+ répertoire <code>python</code> dans les chemins par défaut des
utilitaires du projet <em>certificate-transparency</em>.</li>
- <li>Définissez <code>PATH</code> de façon à inclure le chemin du
- répertoire <code>python/ct/client/tools</code>.</li>
- <li>Exécutez la commande <code>ctauditscts</code> avec comme
+ <li>Définissez <code>PATH</code> de façon à inclure le chemin du
+ répertoire <code>python/ct/client/tools</code>.</li>
+ <li>Exécutez la commande <code>ctauditscts</code> avec comme
arguments la valeur de la directive
- <directive>CTAuditStorage</directive>, et éventuellement le chemin
- de la base de données de configuration des logs. Cette dernière sera
- utilisée pour extraire les URLs des logs en fonction de leurs
+ <directive>CTAuditStorage</directive>, et éventuellement le chemin
+ de la base de données de configuration des logs. Cette dernière sera
+ utilisée pour extraire les URLs des logs en fonction de leurs
identifiants.</li>
</ul>
- <p>Les données stockées à des fins d'audit peuvent aussi être
- utilisées par d'autres programmes ; veuillez vous référer au code
- source de <code>ctauditscts</code> pour plus de détails à propos du
- traitement des données.</p>
+ <p>Les données stockées à des fins d'audit peuvent aussi être
+ utilisées par d'autres programmes ; veuillez vous référer au code
+ source de <code>ctauditscts</code> pour plus de détails à propos du
+ traitement des données.</p>
</section>
<directivesynopsis>
<name>CTAuditStorage</name>
-<description>Répertoire de stockage des données pour l'audit hors ligne</description>
+<description>Répertoire de stockage des données pour l'audit hors ligne</description>
<syntax>CTAuditStorage <em>directory</em></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p>La directive <directive>CTAuditStorage</directive> permet de
- définir le chemin du répertoire où les données destinées à un audit hors
- ligne seront stockées. Ce répertoire doit exister au préalable. Si le
+ définir le chemin du répertoire où les données destinées à un audit hors
+ ligne seront stockées. Ce répertoire doit exister au préalable. Si le
chemin contenu dans l'argument <em>directory</em> n'est pas absolu, il
- sera considéré comme relatif au chemin défini par la directive
+ sera considéré comme relatif au chemin défini par la directive
<directive module="core">DefaultRuntimeDir</directive>.</p>
- <p>Si cette directive n'est pas définie, aucune donnée ne sera stockée
+ <p>Si cette directive n'est pas définie, aucune donnée ne sera stockée
en vue d'un audit hors ligne.</p>
- <p>Le répertoire considéré contiendra des fichiers nommés
+ <p>Le répertoire considéré contiendra des fichiers nommés
<code><em>PID</em>.tmp</code> pour les processus enfants actifs et
- <code><em>PID</em>.out</code> pour les processus enfants terminés. Les
- données disponibles pour un audit hors ligne sont donc contenues dans les
- fichiers <code>.out</code>. La commande expérimentale
- <code>ctauditscts</code> (située dans l'arborescence des sources de
+ <code><em>PID</em>.out</code> pour les processus enfants terminés. Les
+ données disponibles pour un audit hors ligne sont donc contenues dans les
+ fichiers <code>.out</code>. La commande expérimentale
+ <code>ctauditscts</code> (située dans l'arborescence des sources de
httpd, mais non encore prise en compte par le processus
d'installation), fait appel aux utilitaires du projet
<em>certificate-transparency</em> pour effectuer l'audit.</p>
source <a
href="https://code.google.com/p/certificate-transparency/">certificate-transparency</a>.</p>
- <p>Il est possible d'utiliser une implémentation alternative pour
- extraire les SCTs d'un certificat de serveur à partir du moment où
- l'interface de la ligne de commande est équivalente.</p>
+ <p>Il est possible d'utiliser une implémentation alternative pour
+ extraire les SCTs d'un certificat de serveur à partir du moment où
+ l'interface de la ligne de commande est équivalente.</p>
- <p>Si cette directive n'est pas définie, il n'est pas possible de
+ <p>Si cette directive n'est pas définie, il n'est pas possible de
soumettre les certificats aux logs pour en extraire les SCTs ; seuls
- les SCTs gérés par l'administrateur ou situés dans une extension de
+ les SCTs gérés par l'administrateur ou situés dans une extension de
certificat seront alors fournis aux clients.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CTLogConfigDB</name>
-<description>Base de données pour la configuration des logs avec mises à
+<description>Base de données pour la configuration des logs avec mises à
jour dynamiques</description>
<syntax>CTLogConfigDB <em>filename</em></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<usage>
- <p>La directive <directive>CTLogConfigDB</directive> permet de définir
- le nom de la base de données contenant la configuration des logs
+ <p>La directive <directive>CTLogConfigDB</directive> permet de définir
+ le nom de la base de données contenant la configuration des logs
connus. Si le chemin contenu dans <em>filename</em> n'est pas absolu,
- il est considéré comme relatif au chemin défini par la directive
+ il est considéré comme relatif au chemin défini par la directive
<directive module="core">ServerRoot</directive>.</p>
- <p>Veuillez vous référer à la documentation du programme
- <program>ctlogconfig</program> qui gère la base de données.</p>
+ <p>Veuillez vous référer à la documentation du programme
+ <program>ctlogconfig</program> qui gère la base de données.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CTMaxSCTAge</name>
<description>Age maximum d'un SCT obtenu depuis un log avant son
-raffraîchissement</description>
+raffraîchissement</description>
<syntax>CTMaxSCTAge <em>num-seconds</em></syntax>
<default>1 jour</default>
<contextlist><context>server config</context></contextlist>
<usage>
- <p>Les certificats de serveur dont les SCTs sont supérieurs à cet âge
- maximum seront soumis à nouveau aux logs définis. En général, le log
- va renvoyer le même SCT que précédemment, mais ceux-ci font alors l'objet
- d'une opération de la part du log. Les SCTs seront raffraîchis autant que
- nécessaire au cours du fonctionnement normal du serveur, les nouveaux
- SCTs étant envoyés aux clients au fur et à mesure de leur
- disponibilité.</p>
+ <p>Les certificats de serveur dont les SCTs sont supérieurs à cet âge
+ maximum seront soumis à nouveau aux logs définis. En général, le log
+ va renvoyer le même SCT que précédemment, mais ceux-ci font alors l'objet
+ d'une opération de la part du log. Les SCTs seront raffraîchis autant que
+ nécessaire au cours du fonctionnement normal du serveur, les nouveaux
+ SCTs étant envoyés aux clients au fur et à mesure de leur
+ disponibilité.</p>
</usage>
</directivesynopsis>
<context>virtual host</context></contextlist>
<usage>
- <p>Cette directive permet de contrôler la prise en compte et les
+ <p>Cette directive permet de contrôler la prise en compte et les
recherches de SCTs valides pour un mandataire. Les options disponibles
sont les suivantes :</p>
<dl>
<dt>oblivious</dt>
- <dd>Le mandataire de demandera jamais de SCTs, et par conséquent
+ <dd>Le mandataire de demandera jamais de SCTs, et par conséquent
n'en examinera pas. Le processus de transparance des certificats est
- alors entièrement désactivé pour ce mandataire.</dd>
+ alors entièrement désactivé pour ce mandataire.</dd>
<dt>aware</dt>
<dd>Le mandataire prendra en charge l'ensemble du processus de
- transparence des certificats, à savoir la recherche de SCTs et leur
+ transparence des certificats, à savoir la recherche de SCTs et leur
examen. Le mandataire n'interrompra cependant pas la connexion si le
serveur original ne fournit pas de SCTs valides.</dd>
<dt>require</dt>
<dd>Le mandataire interrompra la connexion avec le serveur original
- si ce dernir ne fournit pas au moins un SCT qui passe avec succès le
+ si ce dernir ne fournit pas au moins un SCT qui passe avec succès le
test de validation en ligne.</dd>
</dl>
<directivesynopsis>
<name>CTSCTStorage</name>
-<description>Répertoire où les SCTs sont stockés</description>
+<description>Répertoire où les SCTs sont stockés</description>
<syntax>CTSCTStorage <em>directory</em></syntax>
<default>none</default>
<contextlist><context>server config</context>
</contextlist>
<usage>
- <p>La directive <directive>CTSCTStorage</directive> permet de définir
- le nom du répertoire où les SCTs et listes de SCTs seront stockés. Si
+ <p>La directive <directive>CTSCTStorage</directive> permet de définir
+ le nom du répertoire où les SCTs et listes de SCTs seront stockés. Si
le chemin contenu dans <em>directory</em> n'est pas absolu, il sera
- considéré comme relatif au chemin défini par la directive <directive
+ considéré comme relatif au chemin défini par la directive <directive
module="core">DefaultRuntimeDir</directive>.</p>
- <p>Chaque certificat voit ses informations stockées dans un sous-répertoire
- qui lui est propre ; le nom de ce sous-répertoire correspond au hash
- SHA-256 du certificat considéré.</p>
+ <p>Chaque certificat voit ses informations stockées dans un sous-répertoire
+ qui lui est propre ; le nom de ce sous-répertoire correspond au hash
+ SHA-256 du certificat considéré.</p>
- <p>Les sous-répertoires propres à chaque certificat contiennent des
- SCTs en provenance des logs définis, des listes de SCTs préparées à
- partir des SCTs configurés statiquement et des SCTs extraits, ainsi
- que diverses informations utilisées pour gérer les SCTs.</p>
+ <p>Les sous-répertoires propres à chaque certificat contiennent des
+ SCTs en provenance des logs définis, des listes de SCTs préparées à
+ partir des SCTs configurés statiquement et des SCTs extraits, ainsi
+ que diverses informations utilisées pour gérer les SCTs.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CTServerHelloSCTLimit</name>
-<description>Nombre maximum de SCTs pouvant être renvoyés au cours de la
+<description>Nombre maximum de SCTs pouvant être renvoyés au cours de la
phase ServerHello</description>
<syntax>CTServerHelloSCTLimit <em>limit</em></syntax>
<default>100</default>
</contextlist>
<usage>
- <p>Cette directive permet de définir le nombre maximum de SCTs pouvant
- être renvoyés par un serveur TLS au cours de la phase ServerHello dans
- le cas où le nombre de logs définis et de SCTs définis statiquement
+ <p>Cette directive permet de définir le nombre maximum de SCTs pouvant
+ être renvoyés par un serveur TLS au cours de la phase ServerHello dans
+ le cas où le nombre de logs définis et de SCTs définis statiquement
est assez important.</p>
- <p>En général, seuls quelques SCTs sont disponibles, cette directive
- n'est donc nécessaire que dans certaines circonstances particulières.</p>
+ <p>En général, seuls quelques SCTs sont disponibles, cette directive
+ n'est donc nécessaire que dans certaines circonstances particulières.</p>
<p>Cette directive ne tient pas compte des SCTs contenus dans les
- extensions de certificats ou les réponses OCSP agrafées.</p>
+ extensions de certificats ou les réponses OCSP agrafées.</p>
</usage>
</directivesynopsis>
<usage>
<p>Cette directive permet de configurer un log particulier. Elle est
- particulièrement appropriée dans les cas où cette configuration est
- rarement modifiée. Si votre cas nécessite plutôt une configuration
- dynamique, veuillez vous référer à la documentation de la directive
+ particulièrement appropriée dans les cas où cette configuration est
+ rarement modifiée. Si votre cas nécessite plutôt une configuration
+ dynamique, veuillez vous référer à la documentation de la directive
<directive module="mod_ssl_ct">CTLogConfigDB</directive>.</p>
- <p>Chacun des six champs doit être renseigné, mais en général, la
- configuration d'un log nécessite peu d'information ; utilisez
- <em>-</em> lorsque vous ne disposez d'aucune information à spécifier
+ <p>Chacun des six champs doit être renseigné, mais en général, la
+ configuration d'un log nécessite peu d'information ; utilisez
+ <em>-</em> lorsque vous ne disposez d'aucune information à spécifier
pour un champ particulier. Par exemple, dans le cas d'une
configuration de serveur simple (non mandataire), l'administrateur n'a
- besoin de spécifier que l'URL du log auquel soumettre des certificats de
+ besoin de spécifier que l'URL du log auquel soumettre des certificats de
serveur afin d'en extraire les SCTs.</p>
- <p>Les champs se définissent comme suit :</p>
+ <p>Les champs se définissent comme suit :</p>
<dl>
<dt><em>log-id</em></dt>
<dd>Il s'agit de l'identifiant du log qui correspond au hash SHA-256
- de la clé publique du log, codé en hexadécimal. Cette chaîne a une
- taille de 64 caractères.
+ de la clé publique du log, codé en hexadécimal. Cette chaîne a une
+ taille de 64 caractères.
<br />
- Ce champ peut être omis lorsque <em>public-key-file</em> est
- renseigné.</dd>
+ Ce champ peut être omis lorsque <em>public-key-file</em> est
+ renseigné.</dd>
<dt><em>public-key-file</em></dt>
- <dd>Il s'agit du chemin d'un fichier contenant la clé publique du log
- codée au format PEM. Si ce chemin n'est pas absolu, il est considéré
- comme relatif au chemin défini par la directive <directive
+ <dd>Il s'agit du chemin d'un fichier contenant la clé publique du log
+ codée au format PEM. Si ce chemin n'est pas absolu, il est considéré
+ comme relatif au chemin défini par la directive <directive
module="core">ServerRoot</directive>.</dd>
<dt><em>trust/distrust</em></dt>
- <dd>Définissez ce champ à <em>1</em> pour marquer le log comme non
+ <dd>Définissez ce champ à <em>1</em> pour marquer le log comme non
digne de confiance, ou pour tout simplement interdire son
- utilisation pour le traitement des certificats. Définissez ce champ
- à <em>-</em> ou <em>0</em> (valeur par défaut) pour accorder votre
+ utilisation pour le traitement des certificats. Définissez ce champ
+ à <em>-</em> ou <em>0</em> (valeur par défaut) pour accorder votre
confiance au log.</dd>
<dt><em>min-timestamp</em> et <em>max-timestamp</em></dt>
- <dd>Un repère de temps (timestamp) est un temps exprimé en
+ <dd>Un repère de temps (timestamp) est un temps exprimé en
millisecondes depuis le temps epoch, sans tenir compte des secondes
- sautées. C'est le format de temps utilisé dans les SCTs. Le repère
- de temps doit être fourni sous la forme d'un nombre décimal.
+ sautées. C'est le format de temps utilisé dans les SCTs. Le repère
+ de temps doit être fourni sous la forme d'un nombre décimal.
<br />
- Spécifiez <strong><code>-</code></strong> pour un des repères de
- temps s'il n'est pas connu. Par exemple, lorsque vous définissez le
- repère de temps minimum valide pour un log qui reste valide,
- spécifiez <strong><code>-</code></strong> pour
+ Spécifiez <strong><code>-</code></strong> pour un des repères de
+ temps s'il n'est pas connu. Par exemple, lorsque vous définissez le
+ repère de temps minimum valide pour un log qui reste valide,
+ spécifiez <strong><code>-</code></strong> pour
<em>max-timestamp</em>.
<br />
- Les SCTs reçu par le mandataire depuis ce log seront invalides si le
- repère de temps est plus ancien que <em>min-timestamp</em> ou plus
- récent que <em>max-timestamp</em>.</dd>
+ Les SCTs reçu par le mandataire depuis ce log seront invalides si le
+ repère de temps est plus ancien que <em>min-timestamp</em> ou plus
+ récent que <em>max-timestamp</em>.</dd>
<dt><em>log-URL</em></dt>
<dd>Il s'agit de l'URL du log auquel soumettre les certificats de
- serveur et ainsi obtenir des SCTs à envoyer aux clients.</dd>
+ serveur et ainsi obtenir des SCTs à envoyer aux clients.</dd>
</dl>
</usage>
<seealso>Le paragraphe <a href="#logconf">Configuration des logs</a>
-contient des informations à caractère plus général à propos des champs qui
-peuvent être définis via cette directive.</seealso>
+contient des informations à caractère plus général à propos des champs qui
+peuvent être définis via cette directive.</seealso>
</directivesynopsis>
</contextlist>
<usage>
- <p>Cette directive permet de définir statiquement un ou plusieurs SCTs
- correspondant à un certificat de serveur. Ce mécanisme peut être
- utilisé à la place ou en complément de l'obtention dynamique des SCTs
+ <p>Cette directive permet de définir statiquement un ou plusieurs SCTs
+ correspondant à un certificat de serveur. Ce mécanisme peut être
+ utilisé à la place ou en complément de l'obtention dynamique des SCTs
en provenance des logs. Toute modification dans le jeu de SCTs d'un
- certificat de serveur particulier sera prise en compte de manière
- dynamique sans avoir à redémarrer le serveur.</p>
+ certificat de serveur particulier sera prise en compte de manière
+ dynamique sans avoir à redémarrer le serveur.</p>
- <p><em>certificate-pem-file</em> fait référence au fichier contenant
+ <p><em>certificate-pem-file</em> fait référence au fichier contenant
le certificat de serveur au format PEM. Si ce chemin n'est pas absolu,
- il sera considéré comme relatif au chemin défini par la directive
+ il sera considéré comme relatif au chemin défini par la directive
<directive module="core">ServerRoot</directive>.</p>
<p><em>sct-directory</em> doit contenir le chemin vers un ou plusieurs
- fichiers possédant l'extension de nom de fichier <code>.sct</code>,
- représentant un ou plusieurs SCTs correspondant au certificat de
+ fichiers possédant l'extension de nom de fichier <code>.sct</code>,
+ représentant un ou plusieurs SCTs correspondant au certificat de
serveur. Si ce chemin n'est pas absolu,
- il sera considéré comme relatif au chemin défini par la directive
+ il sera considéré comme relatif au chemin défini par la directive
<directive module="core">ServerRoot</directive>.</p>
<p>Si <em>sct-directory</em> est vide, aucun message d'erreur ne sera
- affiché.</p>
+ affiché.</p>
- <p>Cette directive peut servir à identifier des répertoires de SCTs
- gérés par une autre infrastructure, sous réserve qu'ils soient
- enregistrés au format binaire avec l'extension de nom de fichier
+ <p>Cette directive peut servir à identifier des répertoires de SCTs
+ gérés par une autre infrastructure, sous réserve qu'ils soient
+ enregistrés au format binaire avec l'extension de nom de fichier
<em>.sct</em>.</p>
</usage>
</directivesynopsis>
<summary>
- <p>Ce module implémente le fournisseur de journalisation "syslog".
+ <p>Ce module implémente le fournisseur de journalisation "syslog".
Il permet de journaliser les messages d'erreur via syslogd(8).</p>
</summary>
<section id="examples">
<title>Exemples</title>
- <p>Si le système le supporte, l'utilisation du paramètre
+ <p>Si le système le supporte, l'utilisation du paramètre
<code>syslog</code> avec la directive ErrorLog (voir la
- documentation du module <module>core</module>) à la place d'un nom
+ documentation du module <module>core</module>) à la place d'un nom
de fichier permet de journaliser les messages d'erreur via
- syslogd(8). Par défaut, c'est le port syslog <code>local7</code> qui
- est utilisé, mais vous pouvez le modifier via la syntaxe
- <code>syslog:<var>port</var></code> où <var>port</var> pourra
- correspondre à un des noms habituellement définis dans la
- documentation de syslog(1). La définition de ce port est réellement
- globale, et même si elle est modifiée au niveau d'un serveur
+ syslogd(8). Par défaut, c'est le port syslog <code>local7</code> qui
+ est utilisé, mais vous pouvez le modifier via la syntaxe
+ <code>syslog:<var>port</var></code> où <var>port</var> pourra
+ correspondre à un des noms habituellement définis dans la
+ documentation de syslog(1). La définition de ce port est réellement
+ globale, et même si elle est modifiée au niveau d'un serveur
virtuel, elle affecte l'ensemble du serveur.</p>
<highlight language="config">ErrorLog syslog:user</highlight>
<name>mod_unique_id</name>
<description>Fournit une variable d'environnement contenant un
-identifiant unique pour chaque requête</description>
+identifiant unique pour chaque requête</description>
<status>Extension</status>
<sourcefile>mod_unique_id.c</sourcefile>
<identifier>unique_id_module</identifier>
<summary>
- <p>Ce module fournit un identifiant dont l'unicité est garantie
- parmi "toutes" les requêtes sous des conditions très précises.
+ <p>Ce module fournit un identifiant dont l'unicité est garantie
+ parmi "toutes" les requêtes sous des conditions très précises.
L'identifiant unique le sera aussi parmi plusieurs machines
- appartenant à un cluster correctement configuré. L'identifiant est
- affecté à la variable d'environnement <code>UNIQUE_ID</code> pour
- chaque requête. Les identifiants uniques sont utiles pour diverses
- raisons dont la nature se situe au delà de la portée de ce
+ appartenant à un cluster correctement configuré. L'identifiant est
+ affecté à la variable d'environnement <code>UNIQUE_ID</code> pour
+ chaque requête. Les identifiants uniques sont utiles pour diverses
+ raisons dont la nature se situe au delà de la portée de ce
document.</p>
</summary>
<section id="theory">
- <title>Théorie</title>
-
- <p>Tout d'abord un bref rappel de la manière dont le serveur Apache
- fonctionne sous Unix (cette fonctionnalité n'étant actuellement pas
- supportée sous Windows NT). Sous Unix, Apache crée plusieurs
- processus enfants, ces derniers traitant les requêtes une par une.
- Chaque processus enfant peut traiter plusieurs requêtes pendant sa
- durée de vie. Dans le cadre de cette discussion, nous supposerons
- que les différents processus enfants ne s'échangent pas de données
- entre eux. Nous nous référerons aux processus enfants sous le nom de
+ <title>Théorie</title>
+
+ <p>Tout d'abord un bref rappel de la manière dont le serveur Apache
+ fonctionne sous Unix (cette fonctionnalité n'étant actuellement pas
+ supportée sous Windows NT). Sous Unix, Apache crée plusieurs
+ processus enfants, ces derniers traitant les requêtes une par une.
+ Chaque processus enfant peut traiter plusieurs requêtes pendant sa
+ durée de vie. Dans le cadre de cette discussion, nous supposerons
+ que les différents processus enfants ne s'échangent pas de données
+ entre eux. Nous nous référerons aux processus enfants sous le nom de
<dfn>processus httpd</dfn>.</p>
- <p>Votre site web est réparti entre une ou plusieurs machines dont
- vous êtes l'administrateur, et que nous nommerons cluster de
- serveurs. Chaque serveur peut exécuter plusieurs instances d'Apache.
- L'ensemble de ces dernières sera considéré comme "l'Univers", et
- sous certaines hypothèses, nous montrerons qu'il est possible dans
- cet univers, de générer des identifiants uniques pour chaque
- requête, sans pour autant nécessiter une communication importante
- entre les différents serveurs du cluster.</p>
+ <p>Votre site web est réparti entre une ou plusieurs machines dont
+ vous êtes l'administrateur, et que nous nommerons cluster de
+ serveurs. Chaque serveur peut exécuter plusieurs instances d'Apache.
+ L'ensemble de ces dernières sera considéré comme "l'Univers", et
+ sous certaines hypothèses, nous montrerons qu'il est possible dans
+ cet univers, de générer des identifiants uniques pour chaque
+ requête, sans pour autant nécessiter une communication importante
+ entre les différents serveurs du cluster.</p>
<p>Les machines de votre cluster doivent satisfaire ces conditions
- (même si le cluster ne comporte qu'une machine, vous devez
+ (même si le cluster ne comporte qu'une machine, vous devez
synchroniser son horloge avec NTP) :</p>
<ul>
- <li>Les temps des machines sont synchronisés via NTP ou tout autre
- protocole de synchronisation du temps en réseau.</li>
+ <li>Les temps des machines sont synchronisés via NTP ou tout autre
+ protocole de synchronisation du temps en réseau.</li>
- <li>Les nom d'hôtes des machines sont tous différents, de façon à
- ce que le module puisse recevoir une adresse IP différente pour
+ <li>Les nom d'hôtes des machines sont tous différents, de façon à
+ ce que le module puisse recevoir une adresse IP différente pour
chaque machine du cluster en effectuant une recherche sur le nom
- d'hôte.</li>
+ d'hôte.</li>
</ul>
- <p>Au vu des caractéristiques actuelles du système d'exploitation,
- nous supposerons que les pids (identifiants processus) sont codés
- sur 32 bits. Si le système d'exploitation utilise plus de 32 bits
- pour un pid, la correction est triviale mais doit être effectuée
+ <p>Au vu des caractéristiques actuelles du système d'exploitation,
+ nous supposerons que les pids (identifiants processus) sont codés
+ sur 32 bits. Si le système d'exploitation utilise plus de 32 bits
+ pour un pid, la correction est triviale mais doit être effectuée
dans le code.</p>
- <p>Ces hypothèses posées, à un instant donné, nous pouvons
+ <p>Ces hypothèses posées, à un instant donné, nous pouvons
distinguer tout processus httpd sur toute machine du cluster de tous
les autres processus httpd. Pour ce faire, il suffit d'utiliser
l'adresse IP de la machine et le pid du processus httpd. Un
- processus httpd peut traiter plusieurs requêtes simultanément si
- vous utilisez un module MPM multi-threadé. Pour identifier les
+ processus httpd peut traiter plusieurs requêtes simultanément si
+ vous utilisez un module MPM multi-threadé. Pour identifier les
threads, Apache httpd utilise en interne un index de threads. Ainsi,
- afin de générer des identifiants uniques pour chaque requête, il
+ afin de générer des identifiants uniques pour chaque requête, il
suffit d'effectuer une distinction en fonction du temps.</p>
- <p>Pour déterminer le temps, nous utiliserons un repère de temps
- Unix (les secondes écoulées depuis le 1er janvier 1970 UTC), et un
- compteur 16 bits. La précision du repère de temps n'étant que d'une
- seconde, le compteur va représenter 65536 valeurs par seconde. Le
- quadruplet <em>(adresse IP, pid, repère de temps, compteur)</em> est
- en mesure de distinguer 65536 requêtes par seconde par processus
- httpd. Il peut cependant arriver que le même pid soit réutilisé au
- cours du temps, et le compteur est là pour pallier cet
- inconvénient.</p>
-
- <p>Lorsqu'un processus enfant httpd est créé, le compteur est
- initialisé avec (nombre de microsecondes actuel divisé par 10)
- modulo 65536 (cette formule a été choisie pour éliminer certains
- problème de variance avec les bits de poids faibles du compteur de
- microsecondes sur certains systèmes). Lorsqu'un identifiant unique
- est généré, le repère de temps utilisé est le moment où la requête
- arrive sur le serveur web. Le compteur est incrémenté à chaque
- création d'identifiant (et peut repasser à 0 lorsqu'il a atteint sa
+ <p>Pour déterminer le temps, nous utiliserons un repère de temps
+ Unix (les secondes écoulées depuis le 1er janvier 1970 UTC), et un
+ compteur 16 bits. La précision du repère de temps n'étant que d'une
+ seconde, le compteur va représenter 65536 valeurs par seconde. Le
+ quadruplet <em>(adresse IP, pid, repère de temps, compteur)</em> est
+ en mesure de distinguer 65536 requêtes par seconde par processus
+ httpd. Il peut cependant arriver que le même pid soit réutilisé au
+ cours du temps, et le compteur est là pour pallier cet
+ inconvénient.</p>
+
+ <p>Lorsqu'un processus enfant httpd est créé, le compteur est
+ initialisé avec (nombre de microsecondes actuel divisé par 10)
+ modulo 65536 (cette formule a été choisie pour éliminer certains
+ problème de variance avec les bits de poids faibles du compteur de
+ microsecondes sur certains systèmes). Lorsqu'un identifiant unique
+ est généré, le repère de temps utilisé est le moment où la requête
+ arrive sur le serveur web. Le compteur est incrémenté à chaque
+ création d'identifiant (et peut repasser à 0 lorsqu'il a atteint sa
valeur maximale).</p>
- <p>Le noyau génère un pid pour chaque processus lors de sa création,
- et le compteur de pid est réinitialisé à une certaine valeur
- lorsqu'il a atteint sa valeur maximale (les pid sont codés sur 16
- bits sous de nombreux Unixes, mais les systèmes les plus récents les
- ont étendus à 32 bits). La même valeur de pid pourra donc être
- réutilisée au cours du temps. Cependant, tant qu'elle n'est pas
- réutilisée dans la même seconde, elle ne remet pas en cause
- l'unicité de notre quadruplet. Nous supposerons donc que le système
- ne créera pas plus de 65536 processus en une seconde (ce nombre peut
- être de 32768 sous certains Unixes, mais même dans ce cas, on est en
- général loin de cette situation).</p>
-
- <p>Il est possible que le temps se répète pour une raison
+ <p>Le noyau génère un pid pour chaque processus lors de sa création,
+ et le compteur de pid est réinitialisé à une certaine valeur
+ lorsqu'il a atteint sa valeur maximale (les pid sont codés sur 16
+ bits sous de nombreux Unixes, mais les systèmes les plus récents les
+ ont étendus à 32 bits). La même valeur de pid pourra donc être
+ réutilisée au cours du temps. Cependant, tant qu'elle n'est pas
+ réutilisée dans la même seconde, elle ne remet pas en cause
+ l'unicité de notre quadruplet. Nous supposerons donc que le système
+ ne créera pas plus de 65536 processus en une seconde (ce nombre peut
+ être de 32768 sous certains Unixes, mais même dans ce cas, on est en
+ général loin de cette situation).</p>
+
+ <p>Il est possible que le temps se répète pour une raison
quelconque.
- Supposons par exemple que l'horloge système soit retardée et repasse
- par un temps passé (ou bien, comme elle avançait, elle a été remise
- à l'heure, et elle repasse par un temps futur). Dans ce cas, il peut
- être facilement démontré que le couple pid/repère de temps peut être
- réutilisé. Le choix de la formule d'initialisation du compteur a
- été effectué dans l'intention de pallier ce problème. Notez qu'un
- nombre vraiment aléatoire serait souhaitable pour initialiser le
+ Supposons par exemple que l'horloge système soit retardée et repasse
+ par un temps passé (ou bien, comme elle avançait, elle a été remise
+ à l'heure, et elle repasse par un temps futur). Dans ce cas, il peut
+ être facilement démontré que le couple pid/repère de temps peut être
+ réutilisé. Le choix de la formule d'initialisation du compteur a
+ été effectué dans l'intention de pallier ce problème. Notez qu'un
+ nombre vraiment aléatoire serait souhaitable pour initialiser le
compteur, mais il n'existe pas de tel nombre directement lisible sur
- la plupart des systèmes (c'est à dire que vous ne pouvez pas
- utiliser rand() car vous devez déclencher le générateur avec une
- valeur unique, et vous ne pouvez pas utiliser le temps à cet effet
- car celui-ci , au moins à la seconde près, s'est répété). Il ne
- s'agit donc pas d'une défense parfaite.</p>
-
- <p>Même si elle n'est pas parfaite, quel est le degré d'efficacité
- de cette défense ? Supposons
- qu'une de vos machines serve au plus 500 requêtes par seconde (ce
- qui constitue une limite supérieure très raisonnable au moment où ce
- document est écrit, car les systèmes ne se contentent en général pas
- de débiter des fichiers statiques). Pour y parvenir, un certain nombre
- de processus enfants sera nécessaire, qui dépendra du nombre de
- clients simultanés présents. Mais soyons pessimiste et supposons
- qu'un seul processus enfant soit capable de servir 500 requêtes par
+ la plupart des systèmes (c'est à dire que vous ne pouvez pas
+ utiliser rand() car vous devez déclencher le générateur avec une
+ valeur unique, et vous ne pouvez pas utiliser le temps à cet effet
+ car celui-ci , au moins à la seconde près, s'est répété). Il ne
+ s'agit donc pas d'une défense parfaite.</p>
+
+ <p>Même si elle n'est pas parfaite, quel est le degré d'efficacité
+ de cette défense ? Supposons
+ qu'une de vos machines serve au plus 500 requêtes par seconde (ce
+ qui constitue une limite supérieure très raisonnable au moment où ce
+ document est écrit, car les systèmes ne se contentent en général pas
+ de débiter des fichiers statiques). Pour y parvenir, un certain nombre
+ de processus enfants sera nécessaire, qui dépendra du nombre de
+ clients simultanés présents. Mais soyons pessimiste et supposons
+ qu'un seul processus enfant soit capable de servir 500 requêtes par
secondes.
- Il existe 1000 valeurs de démarrage possibles du compteur pour
- lesquelles deux séquences de 500 requêtes puissent se recouvrir. Il
- y a donc 1,5% de chance que le processus enfant répète une valeur de
- compteur si le temps se répète (avec une résolution d'une seconde),
- et l'unicité sera alors remise en cause. C'est cependant un exemple
- très pessimiste, et avec les valeurs du monde réel, il y a bien
+ Il existe 1000 valeurs de démarrage possibles du compteur pour
+ lesquelles deux séquences de 500 requêtes puissent se recouvrir. Il
+ y a donc 1,5% de chance que le processus enfant répète une valeur de
+ compteur si le temps se répète (avec une résolution d'une seconde),
+ et l'unicité sera alors remise en cause. C'est cependant un exemple
+ très pessimiste, et avec les valeurs du monde réel, il y a bien
moins de chances que cela ne se produise. Si vous estimez que ceci a
- tout de même quelque chances de se produire sur votre système, vous
- pouvez migrer vers un compteur à 32 bits (en modifiant le code).</p>
+ tout de même quelque chances de se produire sur votre système, vous
+ pouvez migrer vers un compteur à 32 bits (en modifiant le code).</p>
<p>On pourrait supposer que ceci a plus de chance de se produire
- lors du passage à l'heure d'hiver où l'horloge est "retardée". Cela
- ne constitue cependant pas un problème car les temps pris en compte
+ lors du passage à l'heure d'hiver où l'horloge est "retardée". Cela
+ ne constitue cependant pas un problème car les temps pris en compte
ici sont des temps UTC, qui vont "toujours" de l'avant. Notez que
- les Unixes à base de processeur x86 peuvent nécessiter une
- configuration particulière pour que ceci soit vrai -- il doivent
- être configurés pour assumer que l'horloge système est en UTC et
- compenser de manière appropriée. Mais même dans ce cas, si vous
- utilisez NTP, votre temps UTC sera correct peu après le
- redémarrage.</p>
+ les Unixes à base de processeur x86 peuvent nécessiter une
+ configuration particulière pour que ceci soit vrai -- il doivent
+ être configurés pour assumer que l'horloge système est en UTC et
+ compenser de manière appropriée. Mais même dans ce cas, si vous
+ utilisez NTP, votre temps UTC sera correct peu après le
+ redémarrage.</p>
<!-- FIXME: thread_index is unsigned int, so not always 32bit.-->
<p>La variable d'environnement <code>UNIQUE_ID</code> est construite
par codage du quadruplet de 144 bits (adresse IP sur 32 bits, pid
- sur 32 bits, repère de temps sur 32 bits, compteur 16 bits et index
+ sur 32 bits, repère de temps sur 32 bits, compteur 16 bits et index
de threads sur 32 bits) en
- utilisant l'alphabet <code>[A-Za-z0-9_-]</code> d'une manière
- similaire à celle du codage MIME base64, et sa valeur se présente
- sous la forme d'une chaîne de 24 caractères. L'alphabet MIME base64
- est en fait <code>[A-Za-z0-9+/]</code> ; cependant, les caractères
- <code>+</code> et <code>/</code> nécessitent un codage particulier
+ utilisant l'alphabet <code>[A-Za-z0-9_-]</code> d'une manière
+ similaire à celle du codage MIME base64, et sa valeur se présente
+ sous la forme d'une chaîne de 24 caractères. L'alphabet MIME base64
+ est en fait <code>[A-Za-z0-9+/]</code> ; cependant, les caractères
+ <code>+</code> et <code>/</code> nécessitent un codage particulier
dans les URLs, ce qui rend leur utilisation peu commode. Toutes les
- valeurs sont codées dans l'ordre des octets d'une adresse réseau de
- façon à ce
- que le codage soit comparable entre des architectures où l'ordre des
- octets est différent. L'ordre réel de codage est : repère de temps,
- adresse IP, pid, compteur. Cet ordre de codage possède un but
- précis, mais il faut souligner que les applications n'ont aucun
- intérêt à entrer dans les détails de ce codage. Les applications
+ valeurs sont codées dans l'ordre des octets d'une adresse réseau de
+ façon à ce
+ que le codage soit comparable entre des architectures où l'ordre des
+ octets est différent. L'ordre réel de codage est : repère de temps,
+ adresse IP, pid, compteur. Cet ordre de codage possède un but
+ précis, mais il faut souligner que les applications n'ont aucun
+ intérêt à entrer dans les détails de ce codage. Les applications
doivent se contenter de traiter la variable <code>UNIQUE_ID</code>
- comme un symbole opaque, qui peut être comparé avec d'autres
- <code>UNIQUE_ID</code>s en ne testant que leur égalité.</p>
+ comme un symbole opaque, qui peut être comparé avec d'autres
+ <code>UNIQUE_ID</code>s en ne testant que leur égalité.</p>
- <p>L'ordre a été choisi de façon à ce qu'il soit possible de
- modifier le codage dans le futur sans avoir à se préoccuper de
- conflits éventuels avec une base de données de
+ <p>L'ordre a été choisi de façon à ce qu'il soit possible de
+ modifier le codage dans le futur sans avoir à se préoccuper de
+ conflits éventuels avec une base de données de
<code>UNIQUE_ID</code>s existante. Les nouveaux codages doivent
- conserver le repère de temps comme premier élément, et pour le
- reste, utiliser les même alphabet et longueur en bits. Comme les
- repères de temps constituent essentiellement un séquence croissante,
- il suffit que toutes les machines du cluster arrêtent de traiter
- toute requête dans la même <em>seconde repère</em>, et n'utilisent
+ conserver le repère de temps comme premier élément, et pour le
+ reste, utiliser les même alphabet et longueur en bits. Comme les
+ repères de temps constituent essentiellement un séquence croissante,
+ il suffit que toutes les machines du cluster arrêtent de traiter
+ toute requête dans la même <em>seconde repère</em>, et n'utilisent
alors plus l'ancien format de codage. Ensuite, elles peuvent
- reprendre le traitement des requêtes en utilisant les nouveaux
+ reprendre le traitement des requêtes en utilisant les nouveaux
codages.</p>
<p>Nous pensons que ceci apporte une solution relativement portable
- au problème. Les
- identifiants générés possèdent une durée de vie pratiquement infinie
- car les identifiants futurs pourront être allongés selon les
+ au problème. Les
+ identifiants générés possèdent une durée de vie pratiquement infinie
+ car les identifiants futurs pourront être allongés selon les
besoins. Pratiquement aucune communication n'est requise entre les
machines du cluster (seule la synchronisation NTP est requise, ce
- qui représente une charge très faible), et aucune communication
- entre les processus httpd n'est nécessaire (la communication est
- implicite et incluse dans le pid assigné par le noyau). Dans des
- situations très spécifiques, l'identifiant peut être raccourci, mais
- dans ce cas, d'avantage d'informations doivent être admises (par
+ qui représente une charge très faible), et aucune communication
+ entre les processus httpd n'est nécessaire (la communication est
+ implicite et incluse dans le pid assigné par le noyau). Dans des
+ situations très spécifiques, l'identifiant peut être raccourci, mais
+ dans ce cas, d'avantage d'informations doivent être admises (par
exemple, les 32 bits de l'adresse IP sont excessifs pour la plupart
des sites, mais il n'existe pas de valeur de remplacement portable
plus courte).</p>
<modulesynopsis metafile="mod_version.xml.meta">
<name>mod_version</name>
-<description>Configuration dépendant de la version</description>
+<description>Configuration dépendant de la version</description>
<status>Extension</status>
<sourcefile>mod_version.c</sourcefile>
<identifier>version_module</identifier>
<summary>
- <p>Ce module a été conçu pour être utilisé dans les suites de tests
- et les grands réseaux qui doivent prendre en compte différentes
- versions de httpd et différentes configurations. Il fournit un
+ <p>Ce module a été conçu pour être utilisé dans les suites de tests
+ et les grands réseaux qui doivent prendre en compte différentes
+ versions de httpd et différentes configurations. Il fournit un
nouveau conteneur -- <directive type="section"
module="mod_version">IfVersion</directive>, qui apporte une grande
- souplesse dans la vérification de version en permettant une
- comparaison numérique et l'utilisation d'expressions
+ souplesse dans la vérification de version en permettant une
+ comparaison numérique et l'utilisation d'expressions
rationnelles.</p>
<example><title>Exemples</title>
</IfVersion>
<IfVersion >= 2.5>
- # utilise vraiment les nouvelles fonctionnalités :-)
+ # utilise vraiment les nouvelles fonctionnalités :-)
</IfVersion>
</highlight>
</example>
<directivesynopsis type="section">
<name>IfVersion</name>
-<description>Contient des portions de configuration dépendantes de la
+<description>Contient des portions de configuration dépendantes de la
version</description>
-<syntax><IfVersion [[!]<var>opérateur</var>] <var>version</var>> ...
+<syntax><IfVersion [[!]<var>opérateur</var>] <var>version</var>> ...
</IfVersion></syntax>
<contextlist><context>server config</context><context>virtual host
</context>
<usage>
<p>La section <directive type="section">IfVersion</directive>
- rassemble des directives de configuration qui ne sont exécutées que
- si la version de httpd satisfait aux critères spécifiés. Pour une
- comparaison normale (numérique), l'argument <var>version</var> doit
- être spécifié sous le format
+ rassemble des directives de configuration qui ne sont exécutées que
+ si la version de httpd satisfait aux critères spécifiés. Pour une
+ comparaison normale (numérique), l'argument <var>version</var> doit
+ être spécifié sous le format
<code><var>majeur</var>[.<var>mineur</var>[.<var>patch</var>]]</code>,
comme par exemple <code>2.1.0</code> ou <code>2.2</code>.
<var>mineur</var> et <var>patch</var> sont optionnels. Si ces
- numéros sont absents, il se voient affectée implicitement la valeur
- 0. Les <var>opérateur</var>s numériques suivants sont autorisés
+ numéros sont absents, il se voient affectée implicitement la valeur
+ 0. Les <var>opérateur</var>s numériques suivants sont autorisés
:</p>
<table style="zebra" border="1">
- <tr><th><var>opérateur</var></th><th>description</th></tr>
+ <tr><th><var>opérateur</var></th><th>description</th></tr>
<tr><td><code>=</code> ou <code>==</code></td>
- <td>La version de httpd est égale à la valeur
- spécifiée</td></tr>
+ <td>La version de httpd est égale à la valeur
+ spécifiée</td></tr>
<tr><td><code>></code></td>
- <td>La version de httpd est supérieure à la valeur
- spécifiée</td></tr>
+ <td>La version de httpd est supérieure à la valeur
+ spécifiée</td></tr>
<tr><td><code>>=</code></td>
- <td>La version de httpd est supérieure ou égale à la valeur
- spécifiée</td></tr>
+ <td>La version de httpd est supérieure ou égale à la valeur
+ spécifiée</td></tr>
<tr><td><code><</code></td>
- <td>La version de httpd est inférieure à la valeur
- spécifiée</td></tr>
+ <td>La version de httpd est inférieure à la valeur
+ spécifiée</td></tr>
<tr><td><code><=</code></td>
- <td>La version de httpd est inférieure ou égale à la valeur
- spécifiée</td></tr>
+ <td>La version de httpd est inférieure ou égale à la valeur
+ spécifiée</td></tr>
</table>
<example><title>Exemple</title>
<highlight language="config">
<IfVersion >= 2.3>
# la condition n'est satisfaite que pour les versions de httpd
- # supérieures ou égales à 2.3
+ # supérieures ou égales à 2.3
</IfVersion>
</highlight>
</example>
- <p>En plus d'une comparaison numérique, il est possible de comparer
+ <p>En plus d'une comparaison numérique, il est possible de comparer
la version de httpd avec une <glossary ref="regex">expression
- rationnelle</glossary>. Il existe deux méthodes pour spécifier cette
- dernière :</p>
+ rationnelle</glossary>. Il existe deux méthodes pour spécifier cette
+ dernière :</p>
<table style="zebra" border="1">
- <tr><th><var>opérateur</var></th><th>description</th></tr>
+ <tr><th><var>opérateur</var></th><th>description</th></tr>
<tr><td><code>=</code> ou <code>==</code></td>
<td><var>version</var> est de la forme
<code>/<var>regex</var>/</code></td></tr>
<example><title>Exemple</title>
<highlight language="config">
<IfVersion = /^2.4.[01234]$/>
- # exemple de contournement pour les versions boguées
+ # exemple de contournement pour les versions boguées
</IfVersion>
</highlight>
</example>
- <p>Pour inverser la condition, tous les opérateurs peuvent être
- préfixés par un point d'exclamation (<code>!</code>) :</p>
+ <p>Pour inverser la condition, tous les opérateurs peuvent être
+ préfixés par un point d'exclamation (<code>!</code>) :</p>
<example>
<highlight language="config">
</highlight>
</example>
- <p>Si <var>opérateur</var> est absent, sa valeur implicite est
+ <p>Si <var>opérateur</var> est absent, sa valeur implicite est
<code>=</code>.</p>
</usage>
</directivesynopsis>
<title>Modules multi-processus (MPMs)</title>
<summary>
-<p>Ce document décrit ce qu'est un Module Multi-Processus, ainsi
-que la manière dont ces modules sont utilisés par le serveur HTTP Apache.</p>
+<p>Ce document décrit ce qu'est un Module Multi-Processus, ainsi
+que la manière dont ces modules sont utilisés par le serveur HTTP Apache.</p>
</summary>
<section id="introduction"><title>Introduction</title>
<p>La conception du serveur HTTP Apache en fait un serveur web puissant et
- flexible pouvant fonctionner sur une très grande variété de
- plateformes et toute une gamme d'environnements différents. Plateformes
- différentes et environnements différents signifient souvent fonctionnalités
- différentes, ou utilisation de différentes méthodes pour
- implémenter la même fonctionnalité le plus efficacement possible.
- Apache httpd s'est toujours accomodé d'une grande variété d'environnements
- grâce à sa conception modulaire. Cette conception autorise le webmaster
- à choisir quelles fonctionnalités seront incluses
- dans le serveur en sélectionnant les modules à charger soit à la
- compilation, soit à l'exécution.</p>
-
- <p>Le serveur HTTP Apache 2.0 a étendu cette conception modulaire aux
+ flexible pouvant fonctionner sur une très grande variété de
+ plateformes et toute une gamme d'environnements différents. Plateformes
+ différentes et environnements différents signifient souvent fonctionnalités
+ différentes, ou utilisation de différentes méthodes pour
+ implémenter la même fonctionnalité le plus efficacement possible.
+ Apache httpd s'est toujours accomodé d'une grande variété d'environnements
+ grâce à sa conception modulaire. Cette conception autorise le webmaster
+ à choisir quelles fonctionnalités seront incluses
+ dans le serveur en sélectionnant les modules à charger soit à la
+ compilation, soit à l'exécution.</p>
+
+ <p>Le serveur HTTP Apache 2.0 a étendu cette conception modulaire aux
fonctions les plus
- élémentaires d'un serveur web. Le serveur est fourni avec une variété de
+ élémentaires d'un serveur web. Le serveur est fourni avec une variété de
Modules Multi-Processus (MPMs) qui
- sont responsables de l'association aux ports réseau de la machine,
- acceptent les requêtes, et se chargent de répartir ces dernières
- entre les différents processus enfants.</p>
+ sont responsables de l'association aux ports réseau de la machine,
+ acceptent les requêtes, et se chargent de répartir ces dernières
+ entre les différents processus enfants.</p>
- <p>L'extension de la conception modulaire à ce niveau du serveur
+ <p>L'extension de la conception modulaire à ce niveau du serveur
comporte deux avantages importants :</p>
<ul>
<li>Apache httpd peut supporter plus proprement et efficacement une grande
- variété de systèmes d'exploitation. En particulier, la version Windows
+ variété de systèmes d'exploitation. En particulier, la version Windows
du serveur est maintenant beaucoup plus efficace, depuis que
- <module>mpm_winnt</module> peut utiliser les fonctionnalités réseau
- natives à la place de la couche POSIX utilisée par
- Apache httpd 1.3. Cet avantage s'étend aussi aux systèmes d'exploitation
- qui implémentent des MPMs spécialisés.</li>
-
- <li>le serveur est plus à même de répondre aux besoins d'un site
- particulier. Par exemple, les sites qui sont très sollicités peuvent
- utiliser un MPM threadé comme
+ <module>mpm_winnt</module> peut utiliser les fonctionnalités réseau
+ natives à la place de la couche POSIX utilisée par
+ Apache httpd 1.3. Cet avantage s'étend aussi aux systèmes d'exploitation
+ qui implémentent des MPMs spécialisés.</li>
+
+ <li>le serveur est plus à même de répondre aux besoins d'un site
+ particulier. Par exemple, les sites qui sont très sollicités peuvent
+ utiliser un MPM threadé comme
<module>worker</module> ou <module>event</module>, tandis que les sites
- qui privilégient la stabilité ou la compatibilité avec des logiciels
+ qui privilégient la stabilité ou la compatibilité avec des logiciels
plus anciens peuvent utiliser un module comme
<module>prefork</module>.</li>
</ul>
- <p>Du point de vue de l'utilisateur, les MPMs ne sont pas différents des
- autres modules Apache httpd. La principale différence réside dans le fait qu'un
- et un seul MPM à la fois doit être chargé
- lorsque le serveur s'exécute. La liste des
+ <p>Du point de vue de l'utilisateur, les MPMs ne sont pas différents des
+ autres modules Apache httpd. La principale différence réside dans le fait qu'un
+ et un seul MPM à la fois doit être chargé
+ lorsque le serveur s'exécute. La liste des
MPMs disponibles est fournie dans <a href="mod/">l'index des
modules</a>.</p>
</section>
-<section id="defaults"><title>MPM par défaut</title>
+<section id="defaults"><title>MPM par défaut</title>
-<p>La table suivante fournit la liste des MPMs par défaut pour divers
-systèmes d'exploitation. Il s'agit du MPM qui sera utilisé si
-vous n'en spécifiez pas un autre à la compilation.</p>
+<p>La table suivante fournit la liste des MPMs par défaut pour divers
+systèmes d'exploitation. Il s'agit du MPM qui sera utilisé si
+vous n'en spécifiez pas un autre à la compilation.</p>
<table border="1" style="zebra">
<columnspec><column width=".2"/><column width=".2"/></columnspec>
<tr><td>Netware</td><td><module>mpm_netware</module></td></tr>
<tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr>
<tr><td>Unix</td><td><module>prefork</module>, <module>worker</module>,
-ou <module>event</module>, selon les possibilités de la plate-forme</td></tr>
+ou <module>event</module>, selon les possibilités de la plate-forme</td></tr>
<tr><td>Windows</td><td><module>mpm_winnt</module></td></tr>
</table>
-<note><p>Ici, 'Unix' sous-entend les systèmes d'exploitation de type
+<note><p>Ici, 'Unix' sous-entend les systèmes d'exploitation de type
Unix, comme Linux, BSD, Solaris, Mac OS X, etc...</p></note>
-<p>Dans le cas des systèmes d'exploitation de type Unix, le choix du MPM
-à installer est orienté par deux questions :</p>
-<p>1. Est-ce que le système supporte les threads ?</p>
-<p>2. Est-ce que le système supporte le polling thread-safe (et en
+<p>Dans le cas des systèmes d'exploitation de type Unix, le choix du MPM
+à installer est orienté par deux questions :</p>
+<p>1. Est-ce que le système supporte les threads ?</p>
+<p>2. Est-ce que le système supporte le polling thread-safe (et en
particulier les fonctions kqueue et epoll) ?</p>
-<p>Si la réponse aux deux questions est 'oui', le MPM par défaut sera
+<p>Si la réponse aux deux questions est 'oui', le MPM par défaut sera
<module>event</module>.</p>
-<p>Si la réponse à la première question est 'oui', et la réponse à la
-deuxième 'non', le MPM par défaut sera <module>worker</module>.</p>
+<p>Si la réponse à la première question est 'oui', et la réponse à la
+deuxième 'non', le MPM par défaut sera <module>worker</module>.</p>
-<p>Si la réponse aux deux questions est 'non', le MPM par défaut sera
+<p>Si la réponse aux deux questions est 'non', le MPM par défaut sera
<module>prefork</module>.</p>
-<p>En pratique, cela signifie que le MPM par défaut sera presque
-toujours <module>event</module> car tous les systèmes d'exploitation
+<p>En pratique, cela signifie que le MPM par défaut sera presque
+toujours <module>event</module> car tous les systèmes d'exploitation
modernes satisfont aux deux conditions.</p>
</section>
<section id="static"><title>Compiler un module MPM en tant que module
statique</title>
- <p>Les modules MPM peuvent être compilés en tant que modules
+ <p>Les modules MPM peuvent être compilés en tant que modules
statiques sur toutes les plates-formes. A la compilation d'Apache, un
-seul module MPM doit être choisi pour être compilé et lié avec le
-serveur. La recompilation du serveur sera donc nécessaire si vous
+seul module MPM doit être choisi pour être compilé et lié avec le
+serveur. La recompilation du serveur sera donc nécessaire si vous
souhaitez changer de module MPM.</p>
- <p>Pour choisir un module MPM autre que le MPM par défaut,
+ <p>Pour choisir un module MPM autre que le MPM par défaut,
utiliser l'argument
<code>--with-mpm=<em>NOM</em></code> du script
<program>configure</program>. <em>NOM</em> est le nom
- du MPM désiré.</p>
+ du MPM désiré.</p>
- <p>Une fois le serveur compilé, il est possible de savoir quel MPM
- a été choisi à l'aide de la commande <code>./httpd -l</code>.
- Cette commande fournit la liste de tous les modules compilés
+ <p>Une fois le serveur compilé, il est possible de savoir quel MPM
+ a été choisi à l'aide de la commande <code>./httpd -l</code>.
+ Cette commande fournit la liste de tous les modules compilés
avec le serveur, y compris le MPM.</p>
</section>
DSO (Dynamic Shared Object)</title>
<p>Sous Unix et les plates-formes similaires, les modules MPM
- peuvent être compilés en tant que modules DSO et chargés
+ peuvent être compilés en tant que modules DSO et chargés
dynamiquement dans le serveur comme tout module DSO. Compiler les
modules MPM en tant que modules DSO permet de changer de MPM en
modifiant la directive <directive
- module="mod_so">LoadModule</directive> concernée, sans avoir à
+ module="mod_so">LoadModule</directive> concernée, sans avoir à
recompiler le serveur.</p>
<highlight language="config">
</highlight>
<p>Toute tentative de charger plusieurs modules MPM via la directive
- <directive module="mod_so">LoadModule</directive> empêchera le
- serveur de démarrer et affichera l'erreur suivante :</p>
+ <directive module="mod_so">LoadModule</directive> empêchera le
+ serveur de démarrer et affichera l'erreur suivante :</p>
<example>AH00534: httpd: Configuration error: More than one MPM
loaded.</example>
- <p>Cette fonctionnalité est activée via l'option
+ <p>Cette fonctionnalité est activée via l'option
<code>--enable-mpms-shared</code> du script
<program>configure</program>. Si on ajoute l'argument
<code><em>all</em></code>, tous les modules MPM disponibles sur la
- plate-forme considérée seront installés. Cet argument peut aussi
- contenir une liste de modules MPM à installer.</p>
+ plate-forme considérée seront installés. Cet argument peut aussi
+ contenir une liste de modules MPM à installer.</p>
- <p>Le module MPM par défaut, sélectionné automatiquement ou spécifié
+ <p>Le module MPM par défaut, sélectionné automatiquement ou spécifié
via l'option <code>--with-mpm</code> du script
- <program>configure</program>, sera chargé via une directive
+ <program>configure</program>, sera chargé via une directive
<directive module="mod_so">LoadModule</directive> du fichier de
- configuration du serveur généré. Pour choisir un autre module MPM,
+ configuration du serveur généré. Pour choisir un autre module MPM,
vous devrez donc modifier cette directive</p>
</section>
<manualpage metafile="new_features_2_2.xml.meta">
-<title>Aperçu des nouvelles fonctionnalités de la version
+<title>Aperçu des nouvelles fonctionnalités de la version
2.2 du serveur HTTP Apache</title>
<summary>
- <p>Ce document décrit quelques uns des changements principaux entre
+ <p>Ce document décrit quelques uns des changements principaux entre
les versions 2.0 et 2.2 du serveur HTTP Apache. Pour les
- nouvelles fonctionnalités ajoutées depuis la version 1.3, se
- référer au document
+ nouvelles fonctionnalités ajoutées depuis la version 1.3, se
+ référer au document
<a href="new_features_2_0.html">2.0 new features</a>.</p>
</summary>
<section id="core">
- <title>Améliorations du système de base</title>
+ <title>Améliorations du système de base</title>
<dl>
<dt>Authn/Authz</dt>
- <dd>Les modules d'authentification et d'autorisation intégrés
- ont été refondus. Le nouveau module
- mod_authn_alias (supprimé dans la version 2.3/2.4) permet de
- simplifier considérablement certaines configurations d'authentification.
+ <dd>Les modules d'authentification et d'autorisation intégrés
+ ont été refondus. Le nouveau module
+ mod_authn_alias (supprimé dans la version 2.3/2.4) permet de
+ simplifier considérablement certaines configurations d'authentification.
Voir <a href="#module">modification des noms de modules</a>,
et
- <a href="#developer">les changements pour le développeur</a>
- pour plus d'informations sur les conséquences de ces
- changements pour les utilisateurs et les développeurs de
+ <a href="#developer">les changements pour le développeur</a>
+ pour plus d'informations sur les conséquences de ces
+ changements pour les utilisateurs et les développeurs de
modules.</dd>
<dt>Mise en cache</dt>
<dd><module>mod_cache</module>, <module>mod_cache_disk</module>, et
- mod_mem_cache (supprimés dans la version 2.3/2.4) ont subi de nombreuses
- modifications, et l'on considère qu'ils ont maintenant atteint
- un degré de qualité suffisant pour leur mise en production. Le programme
- <program>htcacheclean</program> a été ajouté afin de rendre
+ mod_mem_cache (supprimés dans la version 2.3/2.4) ont subi de nombreuses
+ modifications, et l'on considère qu'ils ont maintenant atteint
+ un degré de qualité suffisant pour leur mise en production. Le programme
+ <program>htcacheclean</program> a été ajouté afin de rendre
plus propre la configuration du module
<module>mod_cache_disk</module>.</dd>
<dt>Configuration</dt>
- <dd>L'agencement de la configuration par défaut a été simplifié
- et modularisé. Les portions de configuration qui peuvent être
- utilisées pour activer des fonctionnalités courantes sont
- maintenant intégrées à Apache, et peuvent être facilement
- ajoutées à la configuration principale du serveur.</dd>
+ <dd>L'agencement de la configuration par défaut a été simplifié
+ et modularisé. Les portions de configuration qui peuvent être
+ utilisées pour activer des fonctionnalités courantes sont
+ maintenant intégrées à Apache, et peuvent être facilement
+ ajoutées à la configuration principale du serveur.</dd>
- <dt>Arrêt en douceur</dt>
+ <dt>Arrêt en douceur</dt>
<dd>Les modules MPM <module>prefork</module>,
<module>worker</module> et <module>event</module> permettent
- maintenant l'arrêt en douceur de <program>httpd</program>
+ maintenant l'arrêt en douceur de <program>httpd</program>
au moyen du signal
<a href="stopping.html#gracefulstop"><code>graceful-stop</code></a>.
La directive <directive module="mpm_common"
- >GracefulShutdownTimeout</directive> a été ajoutée dans le but
- de spécifier un délai optionnel, après lequel
- <program>httpd</program> s'arrêtera quel que soit le statut
- des requêtes en cours.</dd>
+ >GracefulShutdownTimeout</directive> a été ajoutée dans le but
+ de spécifier un délai optionnel, après lequel
+ <program>httpd</program> s'arrêtera quel que soit le statut
+ des requêtes en cours.</dd>
<dt>Mise en oeuvre du proxy</dt>
<dd>Le nouveau module <module>mod_proxy_balancer</module> fournit
- des services de répartition de charge (load balancing) pour le
+ des services de répartition de charge (load balancing) pour le
module <module>mod_proxy</module>.
Le nouveau module <module>mod_proxy_ajp</module> ajoute le
support pour le
<code>Protocole JServ de Apache version 1.3</code> qu'utilise
<a href="http://tomcat.apache.org/">Apache Tomcat</a>.</dd>
- <dt>Mise à jour de la bibliothèque des expressions rationnelles</dt>
+ <dt>Mise à jour de la bibliothèque des expressions rationnelles</dt>
<dd>La version 5.0 de la
<a href="http://www.pcre.org/">Perl Compatible Regular Expression
Library</a> (PCRE) est maintenant disponible.
- <program>httpd</program> peut être configuré pour utiliser une
+ <program>httpd</program> peut être configuré pour utiliser une
PCRE choisie en passant l'option <code>--with-pcre</code> au
script configure.</dd>
<dt>Filtrage intelligent</dt>
<dd>Le module <module>mod_filter</module> permet la configuration
- dynamique de la chaîne de filtrage en sortie. Il permet
- d'insérer des filtres conditionnels basés sur toute
- requête, en-tête de réponse ou variable
- d'environnement, et fait table rase des problèmes de dépendances
- et d'ordonnancement rencontrés avec l'architecture 2.0.</dd>
+ dynamique de la chaîne de filtrage en sortie. Il permet
+ d'insérer des filtres conditionnels basés sur toute
+ requête, en-tête de réponse ou variable
+ d'environnement, et fait table rase des problèmes de dépendances
+ et d'ordonnancement rencontrés avec l'architecture 2.0.</dd>
<dt>Support des gros fichiers</dt>
- <dd><program>httpd</program> supporte maintenant les fichiers d'une taille supérieure
- à 2GB sur les systèmes 32 bits UNIX modernes. Le support des
- corps de requête d'une taille supérieure à 2GB a aussi été
- ajouté.</dd>
+ <dd><program>httpd</program> supporte maintenant les fichiers d'une taille supérieure
+ à 2GB sur les systèmes 32 bits UNIX modernes. Le support des
+ corps de requête d'une taille supérieure à 2GB a aussi été
+ ajouté.</dd>
<dt>Module MPM Event</dt>
- <dd>Le module MPM <module>event</module> utilise un thread séparé
- pour gérer les requêtes "Keep alive" et accepter des connexions.
- Les requêtes "Keep alive" requéraient traditionnellement un
- processus httpd dédié pour leur gestion. Ce processus dédié
- ne pouvait plus être réutilisé jusqu'à ce que le délai "Keep Alive"
- soit écoulé.</dd>
-
- <dt>Support des bases de données SQL</dt>
- <dd>Le module <module>mod_dbd</module>, associé à l'environnement
+ <dd>Le module MPM <module>event</module> utilise un thread séparé
+ pour gérer les requêtes "Keep alive" et accepter des connexions.
+ Les requêtes "Keep alive" requéraient traditionnellement un
+ processus httpd dédié pour leur gestion. Ce processus dédié
+ ne pouvait plus être réutilisé jusqu'à ce que le délai "Keep Alive"
+ soit écoulé.</dd>
+
+ <dt>Support des bases de données SQL</dt>
+ <dd>Le module <module>mod_dbd</module>, associé à l'environnement
<code>apr_dbd</code>, fournit le support SQL direct aux modules
qui en ont besoin. Supporte la mise en commun des connexions
- dans les modules MPM threadés.</dd>
+ dans les modules MPM threadés.</dd>
</dl>
</section>
<section id="module">
- <title>Améliorations des modules</title>
+ <title>Améliorations des modules</title>
<dl>
<dt>Authn/Authz</dt>
- <dd>Les modules du répertoire aaa ont été renommés et fournissent
- un support amélioré pour la méthode d'authentification <strong>digest</strong>. Par exemple, <code>mod_auth</code>
- est maintenant scindé en deux modules : <module>mod_auth_basic</module> et
+ <dd>Les modules du répertoire aaa ont été renommés et fournissent
+ un support amélioré pour la méthode d'authentification <strong>digest</strong>. Par exemple, <code>mod_auth</code>
+ est maintenant scindé en deux modules : <module>mod_auth_basic</module> et
<module>mod_authn_file</module>; <code>mod_auth_dbm</code> s'appelle maintenant
- <module>mod_authn_dbm</module>; <code>mod_access</code> a été renommé en
- <module>mod_authz_host</module>. Est également apparu le nouveau module
- mod_authn_alias (supprimé dans la version 2.3/2.4) qui simplifie
+ <module>mod_authn_dbm</module>; <code>mod_access</code> a été renommé en
+ <module>mod_authz_host</module>. Est également apparu le nouveau module
+ mod_authn_alias (supprimé dans la version 2.3/2.4) qui simplifie
certaines configurations d'authentification.
</dd>
<dd>Ce module est un portage de la version 2.0 du module
<code>mod_auth_ldap</code> vers la version 2.2 du framework
<code>Authn/Authz</code>.
- Les nouvelles fonctionnalités comprennent l'utilisation des valeurs
- d'attributs LDAP et des filtres de recherche avancés dans la
+ Les nouvelles fonctionnalités comprennent l'utilisation des valeurs
+ d'attributs LDAP et des filtres de recherche avancés dans la
directive <directive module="mod_authz_core">Require</directive>.</dd>
<dt><module>mod_authz_owner</module></dt>
- <dd>Un nouveau module qui autorise l'accès à un fichier
- en fonction de son propriétaire dans le système de
+ <dd>Un nouveau module qui autorise l'accès à un fichier
+ en fonction de son propriétaire dans le système de
fichiers</dd>
<dt><module>mod_version</module></dt>
<dd>Un nouveau module qui permet d'activer des blocs de
configuration en fonction de la version du serveur en cours
- d'exécution.</dd>
+ d'exécution.</dd>
<dt><module>mod_info</module></dt>
- <dd>Un nouvel argument <code>?config</code> a été ajouté, qui permettra d'afficher
- les directives de configuration telles qu'elles sont interprétées
- par Apache, y compris le nom de fichier et le numéro de ligne.
- Le module montre aussi l'ordre des points d'entrée de traitement d'une
- requête (request hooks) ainsi que des informations de construction
- supplémentaires, d'une manière similaire à <code>httpd -V</code>.</dd>
+ <dd>Un nouvel argument <code>?config</code> a été ajouté, qui permettra d'afficher
+ les directives de configuration telles qu'elles sont interprétées
+ par Apache, y compris le nom de fichier et le numéro de ligne.
+ Le module montre aussi l'ordre des points d'entrée de traitement d'une
+ requête (request hooks) ainsi que des informations de construction
+ supplémentaires, d'une manière similaire à <code>httpd -V</code>.</dd>
<dt><module>mod_ssl</module></dt>
<!-- Need Info on SSLEngine Support? -->
<dd>Le support de la <a href="http://www.ietf.org/rfc/rfc2817.txt"
- >RFC 2817</a> a été ajouté, ce qui permet de passer d'une
+ >RFC 2817</a> a été ajouté, ce qui permet de passer d'une
connexion en clair au chiffrement TLS.</dd>
<dt><module>mod_imagemap</module></dt>
- <dd><code>mod_imap</code> a été renommé en <module>mod_imagemap</module> afin
- d'éviter une confusion pour les utilisateurs.</dd>
+ <dd><code>mod_imap</code> a été renommé en <module>mod_imagemap</module> afin
+ d'éviter une confusion pour les utilisateurs.</dd>
</dl>
</section>
<section id="programs">
- <title>Améliorations des programmes</title>
+ <title>Améliorations des programmes</title>
<dl>
<dt><program>httpd</program></dt>
<dd>Une nouvelle option de ligne de commande <code>-M</code>
- a été ajoutée, qui fournit la liste de tous les modules chargés
- en fonction de la configuration réelle. À la différence de l'option
- <code>-l</code>, cette liste inclut les Objets Dynamiques Partagés
- (DSOs) chargés par l'intermédiaire du module
+ a été ajoutée, qui fournit la liste de tous les modules chargés
+ en fonction de la configuration réelle. À la différence de l'option
+ <code>-l</code>, cette liste inclut les Objets Dynamiques Partagés
+ (DSOs) chargés par l'intermédiaire du module
<module>mod_so</module>.</dd>
<dt><program>httxt2dbm</program></dt>
- <dd>Un nouveau programme servant à générer des fichiers dbm à partir
- d'une source au format texte, à utiliser avec la directive
+ <dd>Un nouveau programme servant à générer des fichiers dbm à partir
+ d'une source au format texte, à utiliser avec la directive
<directive module="mod_rewrite">RewriteMap</directive>
et le type de mise en correspondance <code>dbm</code>.</dd>
</dl>
</section>
<section id="developer">
- <title>Changements pour le développeur de module</title>
+ <title>Changements pour le développeur de module</title>
<dl>
<dt><glossary>APR</glossary> 1.0 API</dt>
<dd>Apache 2.2 utilise l'API APR 1.0. Toutes les fonctions et
- symboles obsolètes ont été supprimés du code de <code>APR</code> et
- <code>APR-Util</code>. Pour plus de détails, consultez le
+ symboles obsolètes ont été supprimés du code de <code>APR</code> et
+ <code>APR-Util</code>. Pour plus de détails, consultez le
<a href="http://apr.apache.org/">site web d'APR</a>.</dd>
<dt>Authn/Authz</dt>
- <dd>Les modules d'authentification et d'autorisation intégrés ont
- été renommés de la manière suivante:
+ <dd>Les modules d'authentification et d'autorisation intégrés ont
+ été renommés de la manière suivante:
<ul>
- <li><code>mod_auth_*</code> -> Modules qui implémentent un mécanisme
+ <li><code>mod_auth_*</code> -> Modules qui implémentent un mécanisme
d'authentification HTTP</li>
<li><code>mod_authn_*</code> -> Modules qui fournissent un dispositif
- d'authentification en arrière-plan</li>
- <li><code>mod_authz_*</code> -> Modules qui implémentent l'autorisation (ou l'accès)</li>
- <li><code>mod_authnz_*</code> -> Modules qui implémentent à la fois
+ d'authentification en arrière-plan</li>
+ <li><code>mod_authz_*</code> -> Modules qui implémentent l'autorisation (ou l'accès)</li>
+ <li><code>mod_authnz_*</code> -> Modules qui implémentent à la fois
l'authentification & l'autorisation</li>
</ul>
- L'organisation des méthodes d'authentification a également été revue, ce qui va simplifier
- grandement l'ajout de nouvelles méthodes d'authentification.</dd>
+ L'organisation des méthodes d'authentification a également été revue, ce qui va simplifier
+ grandement l'ajout de nouvelles méthodes d'authentification.</dd>
<dt>Journalisation des erreurs de connexion</dt>
- <dd>Une nouvelle fonction a été ajoutée, <code>ap_log_cerror</code>,
+ <dd>Une nouvelle fonction a été ajoutée, <code>ap_log_cerror</code>,
afin de pouvoir enregistrer les erreurs qui surviennent au cours de
- la connexion du client. Une fois enregistré, le message inclut l'adresse IP du client.</dd>
+ la connexion du client. Une fois enregistré, le message inclut l'adresse IP du client.</dd>
- <dt>Ajout d'une portion de code pour la vérification de la configuration</dt>
+ <dt>Ajout d'une portion de code pour la vérification de la configuration</dt>
- <dd>Un nouvel élément de traitement a été ajouté, <code>test_config</code>,
- afin d'aider les modules qui ne veulent exécuter un code spécial
- que si l'utilisateur passe le paramètre <code>-t</code> à
+ <dd>Un nouvel élément de traitement a été ajouté, <code>test_config</code>,
+ afin d'aider les modules qui ne veulent exécuter un code spécial
+ que si l'utilisateur passe le paramètre <code>-t</code> à
<program>httpd</program>.</dd>
- <dt>Définition de la taille de la pile pour les modules MPM en processus légers</dt>
+ <dt>Définition de la taille de la pile pour les modules MPM en processus légers</dt>
- <dd>Une nouvelle directive a été ajoutée, <directive module="mpm_common"
+ <dd>Une nouvelle directive a été ajoutée, <directive module="mpm_common"
>ThreadStackSize</directive>
- afin de définir la taille de la pile pour tous les modules MPM en processus légers (modules threadés).
- Ceci s'avère nécessaire pour certains modules tiers sur des plateformes
- dont la taille de la pile des threads par défaut est
+ afin de définir la taille de la pile pour tous les modules MPM en processus légers (modules threadés).
+ Ceci s'avère nécessaire pour certains modules tiers sur des plateformes
+ dont la taille de la pile des threads par défaut est
trop petite.</dd>
<dt>Gestion de protocole pour les filtres en sortie</dt>
- <dd>Par le passé, chaque filtre devait s'assurer que les en-têtes de
- réponse corrects étaient générés dans la mesure où il les affectait.
- Les filtres peuvent maintenant déléguer la gestion courante du
+ <dd>Par le passé, chaque filtre devait s'assurer que les en-têtes de
+ réponse corrects étaient générés dans la mesure où il les affectait.
+ Les filtres peuvent maintenant déléguer la gestion courante du
protocole au module
- <module>mod_filter</module>, à l'aide des appels
+ <module>mod_filter</module>, à l'aide des appels
<code>ap_register_output_filter_protocol</code> ou
<code>ap_filter_protocol</code>.</dd>
- <dt>Ajout d'un élément de traitement pour le processus père (monitor hook)</dt>
- <dd>Ce nouvel élément de traitement permet aux modules de lancer
- des jobs réguliers/planifiés au niveau du processus père
+ <dt>Ajout d'un élément de traitement pour le processus père (monitor hook)</dt>
+ <dd>Ce nouvel élément de traitement permet aux modules de lancer
+ des jobs réguliers/planifiés au niveau du processus père
(root).</dd>
<dt>Modifications de l'API de traitement des expressions rationnelles</dt>
- <dd>Le fichier d'en-tête <code>pcreposix.h</code> n'est plus disponible ;
- il a été remplacé par le nouveau fichier
- d'en-tête <code>ap_regex.h</code>. L'implémentation
- POSIX.2 <code>regex.h</code> exposée dans l'ancien fichier d'en-tête
+ <dd>Le fichier d'en-tête <code>pcreposix.h</code> n'est plus disponible ;
+ il a été remplacé par le nouveau fichier
+ d'en-tête <code>ap_regex.h</code>. L'implémentation
+ POSIX.2 <code>regex.h</code> exposée dans l'ancien fichier d'en-tête
est maintenant disponible dans l'espace de nommage <code>ap_</code>
- depuis <code>ap_regex.h</code>. Les appels à <code>regcomp</code>,
- <code>regexec</code>, etc... peuvent être remplacés par des appels à
+ depuis <code>ap_regex.h</code>. Les appels à <code>regcomp</code>,
+ <code>regexec</code>, etc... peuvent être remplacés par des appels à
<code>ap_regcomp</code>, <code>ap_regexec</code>.</dd>
- <dt>Cadre d'application DBD (API pour base de données SQL)</dt>
+ <dt>Cadre d'application DBD (API pour base de données SQL)</dt>
- <dd><p>Avec Apache 1.x et 2.0, les modules nécessitant un processus
- SQL d'arrière-plan devaient s'en charger eux-mêmes. En dehors du fait
- de réinventer la roue, ceci peut s'avérer très inefficace, par
+ <dd><p>Avec Apache 1.x et 2.0, les modules nécessitant un processus
+ SQL d'arrière-plan devaient s'en charger eux-mêmes. En dehors du fait
+ de réinventer la roue, ceci peut s'avérer très inefficace, par
exemple lorsque plusieurs modules maintiennent chacun leurs
propres connexions.</p>
- <p>Apache 2.1 et supérieur fournissent l'API <code>ap_dbd</code> qui
- permet la gestion des connexions à la base de données (y compris
- les stratégies optimisées pour les modules MPM threadés
- et non threadés), tandis que APR 1.2 et supérieur fournissent
+ <p>Apache 2.1 et supérieur fournissent l'API <code>ap_dbd</code> qui
+ permet la gestion des connexions à la base de données (y compris
+ les stratégies optimisées pour les modules MPM threadés
+ et non threadés), tandis que APR 1.2 et supérieur fournissent
l'API <code>apr_dbd</code> qui permet l'interaction avec la
- base de données.</p>
- <p>Les nouveaux modules DEVRAIENT désormais utiliser ces APIs pour
- toutes les opérations liées aux bases de données SQL.
- De même, les applications existantes DEVRAIENT être mises à jour
- lorsque c'est possible, que ce soit de manière transparente ou sous forme
- d'une option recommandée à leurs utilisateurs.</p></dd>
+ base de données.</p>
+ <p>Les nouveaux modules DEVRAIENT désormais utiliser ces APIs pour
+ toutes les opérations liées aux bases de données SQL.
+ De même, les applications existantes DEVRAIENT être mises à jour
+ lorsque c'est possible, que ce soit de manière transparente ou sous forme
+ d'une option recommandée à leurs utilisateurs.</p></dd>
</dl>
</section>
</manualpage>
<manualpage metafile="apachectl.xml.meta">
<parentdocument href="./">Programmes</parentdocument>
- <title>apachectl - L'interface de contrôle du serveur HTTP
+ <title>apachectl - L'interface de contrôle du serveur HTTP
Apache</title>
<summary>
<p><program>apachectl</program> est un frontal pour le serveur HTTP
- Apache. Il a été conçu pour aider l'administrateur à contrôler le
- fonctionnement du démon Apache <program>httpd</program>.</p>
+ Apache. Il a été conçu pour aider l'administrateur à contrôler le
+ fonctionnement du démon Apache <program>httpd</program>.</p>
- <p>Le script <program>apachectl</program> possède deux modes de
+ <p>Le script <program>apachectl</program> possède deux modes de
fonctionnement. Il peut fonctionner en tant que simple frontal
de la commande <program>httpd</program> et ne fait alors que
- définir toute variable d'environnement nécessaire, puis invoque
+ définir toute variable d'environnement nécessaire, puis invoque
<program>httpd</program> en lui passant tout argument de ligne de
- commande souhaité. Il peut aussi fonctionner en tant que script
+ commande souhaité. Il peut aussi fonctionner en tant que script
d'initialisation SysV n'acceptant qu'un seul argument tel que
<code>start</code>, <code>restart</code> et <code>stop</code>, et
- traduisant ce dernier en signaux appropriés pour le démon
+ traduisant ce dernier en signaux appropriés pour le démon
<program>httpd</program>.</p>
<p>Si votre installation d'Apache utilise des chemins non
- standards, vous devrez éditer le script <program>apachectl</program> afin
- de définir les chemins appropriés pour le binaire
- <program>httpd</program>. Vous pouvez aussi spécifier tout argument
- de ligne de commande de <program>httpd</program> nécessaire. Voir
- les commentaires dans le script pour plus de détails.</p>
-
- <p>Le script <program>apachectl</program> renvoie une valeur égale à 0 en
- cas de succès, et une valeur supérieure à 0 en cas de problème.
- Voir les commentaires dans le script pour plus de détails.</p>
+ standards, vous devrez éditer le script <program>apachectl</program> afin
+ de définir les chemins appropriés pour le binaire
+ <program>httpd</program>. Vous pouvez aussi spécifier tout argument
+ de ligne de commande de <program>httpd</program> nécessaire. Voir
+ les commentaires dans le script pour plus de détails.</p>
+
+ <p>Le script <program>apachectl</program> renvoie une valeur égale à 0 en
+ cas de succès, et une valeur supérieure à 0 en cas de problème.
+ Voir les commentaires dans le script pour plus de détails.</p>
</summary>
-<seealso><a href="../invoking.html">Démarrer Apache</a></seealso>
-<seealso><a href="../stopping.html">Arrêter Apache</a></seealso>
+<seealso><a href="../invoking.html">Démarrer Apache</a></seealso>
+<seealso><a href="../stopping.html">Arrêter Apache</a></seealso>
<seealso><a href="../configuring.html">Fichiers de
configuration</a></seealso>
-<seealso><a href="../platform/">Documentation spécifique aux
+<seealso><a href="../platform/">Documentation spécifique aux
plates-formes</a></seealso>
<seealso><program>httpd</program></seealso>
-<section id="synopsis"><title>Résumé</title>
+<section id="synopsis"><title>Résumé</title>
-<p>En mode frontal (pass-through), <program>apachectl</program> peut spécifier
+<p>En mode frontal (pass-through), <program>apachectl</program> peut spécifier
tous les arguments qu'accepte le binaire <program>httpd</program>.</p>
<p><code><strong>apachectl</strong> [ <var>argument-httpd</var> ]</code></p>
<p>En mode script d'initialisation SysV, <program>apachectl</program>
-n'accepte qu'un seul des arguments définis ci-dessous.</p>
+n'accepte qu'un seul des arguments définis ci-dessous.</p>
<p><code><strong>apachectl</strong> <var>commande</var></code></p>
<section id="options"><title>Options</title>
-<p>Seules les options du style initialisation SysV sont décrites ici.
-Les autres arguments sont décrits dans la page de manuel de
+<p>Seules les options du style initialisation SysV sont décrites ici.
+Les autres arguments sont décrits dans la page de manuel de
<program>httpd</program>.</p>
<dl>
<dt><code>start</code></dt>
-<dd>Démarre le démon Apache <program>httpd</program>. Renvoie une erreur
-s'il est déjà en cours d'exécution. Équivalent à <code>apachectl -k
+<dd>Démarre le démon Apache <program>httpd</program>. Renvoie une erreur
+s'il est déjà en cours d'exécution. Équivalent à <code>apachectl -k
start</code>.</dd>
<dt><code>stop</code></dt>
-<dd>Arrête le démon Apache <program>httpd</program>. Équivalent à
+<dd>Arrête le démon Apache <program>httpd</program>. Équivalent à
<code>apachectl -k stop</code>.</dd>
<dt><code>restart</code></dt>
-<dd>Redémarre le démon Apache <program>httpd</program>. Si le démon
-n'est pas en cours d'exécution, il est démarré. Cette option vérifie
-automatiquement les fichiers de configuration (de la même manière que
-l'option <code>configtest</code> ) avant de lancer le redémarrage, afin
-d'être sûr que le fonctionnement du démon ne sera pas compromis.
-Equivalent à <code>apachectl -k restart</code>.</dd>
+<dd>Redémarre le démon Apache <program>httpd</program>. Si le démon
+n'est pas en cours d'exécution, il est démarré. Cette option vérifie
+automatiquement les fichiers de configuration (de la même manière que
+l'option <code>configtest</code> ) avant de lancer le redémarrage, afin
+d'être sûr que le fonctionnement du démon ne sera pas compromis.
+Equivalent à <code>apachectl -k restart</code>.</dd>
<dt><code>fullstatus</code></dt>
-<dd>Affiche le rapport d'état complet du module
+<dd>Affiche le rapport d'état complet du module
<module>mod_status</module>. Pour que ceci fonctionne,
-<module>mod_status</module> doit être activé dans votre serveur et vous
+<module>mod_status</module> doit être activé dans votre serveur et vous
devez disposer d'un navigateur en mode texte tel que <code>lynx</code>
-sur votre système. L'URL utilisée pour accéder au rapport d'état peut
-être modifiée en définissant la variable <code>STATUSURL</code> dans le
+sur votre système. L'URL utilisée pour accéder au rapport d'état peut
+être modifiée en définissant la variable <code>STATUSURL</code> dans le
script.</dd>
<dt><code>status</code></dt>
-<dd>Affiche un rapport d'état succinct. Similaire à l'option
-<code>fullstatus</code>, excepté que la liste des requêtes en cours de
+<dd>Affiche un rapport d'état succinct. Similaire à l'option
+<code>fullstatus</code>, excepté que la liste des requêtes en cours de
traitement est omise.</dd>
<dt><code>graceful</code></dt>
-<dd>Redémarre le démon Apache <program>httpd</program> en douceur. Si le
-démon n'est pas en cours d'exécution, il est démarré. À la différence
-d'un redémarrage normal, les connexions en cours ne sont pas fermées.
-Comme effet de bord, les anciens fichiers journaux ne seront pas fermés
-immédiatement. Cela signifie que si l'on utilise un script de rotation
-des journaux, un délai suffisant sera nécessaire afin d'être sûr que les
-fichiers journaux seront bien fermés avant leur traitement par le script
-de rotation. Cette option vérifie
-automatiquement les fichiers de configuration (de la même manière que
-l'option <code>configtest</code> ) avant de lancer le redémarrage, afin
-d'être sûr que le fonctionnement du démon ne sera pas compromis.
-Équivalent à <code>apachectl -k graceful</code>.</dd>
+<dd>Redémarre le démon Apache <program>httpd</program> en douceur. Si le
+démon n'est pas en cours d'exécution, il est démarré. À la différence
+d'un redémarrage normal, les connexions en cours ne sont pas fermées.
+Comme effet de bord, les anciens fichiers journaux ne seront pas fermés
+immédiatement. Cela signifie que si l'on utilise un script de rotation
+des journaux, un délai suffisant sera nécessaire afin d'être sûr que les
+fichiers journaux seront bien fermés avant leur traitement par le script
+de rotation. Cette option vérifie
+automatiquement les fichiers de configuration (de la même manière que
+l'option <code>configtest</code> ) avant de lancer le redémarrage, afin
+d'être sûr que le fonctionnement du démon ne sera pas compromis.
+Équivalent à <code>apachectl -k graceful</code>.</dd>
<dt><code>graceful-stop</code></dt>
-<dd>Arrête le démon Apache <program>httpd</program> en douceur. À la
-différence d'un arrêt normal, les connexions en cours ne sont pas
-fermées. Comme effet de bord, les anciens fichiers journaux ne seront
-pas fermés immédiatement. Équivalent à <code>apachectl -k
+<dd>Arrête le démon Apache <program>httpd</program> en douceur. À la
+différence d'un arrêt normal, les connexions en cours ne sont pas
+fermées. Comme effet de bord, les anciens fichiers journaux ne seront
+pas fermés immédiatement. Équivalent à <code>apachectl -k
graceful-stop</code>.</dd>
<dt><code>configtest</code></dt>
-<dd>Effectue une vérification de la syntaxe du fichier de configuration.
+<dd>Effectue une vérification de la syntaxe du fichier de configuration.
Avec cette option, le script parcourt le fichier de configuration et
-renvoie soit <code>Syntax Ok</code>, soit des informations détaillées à
-propos des éventuelles erreurs de syntaxe. Equivalent à <code>apachectl
+renvoie soit <code>Syntax Ok</code>, soit des informations détaillées à
+propos des éventuelles erreurs de syntaxe. Equivalent à <code>apachectl
-t</code>.</dd>
</dl>
-<p>Les options suivantes étaient disponibles dans les anciennes versions
-et ont été supprimées.</p>
+<p>Les options suivantes étaient disponibles dans les anciennes versions
+et ont été supprimées.</p>
<dl>
<dt><code>startssl</code></dt>
-<dd>Pour démarrer <program>httpd</program> avec le support SSL, vous
-devez éditer votre fichier de configuration et y inclure les
-directives appropriées, puis utiliser la commande de démarrage normale
+<dd>Pour démarrer <program>httpd</program> avec le support SSL, vous
+devez éditer votre fichier de configuration et y inclure les
+directives appropriées, puis utiliser la commande de démarrage normale
<code>apachectl start</code>.</dd>
</dl>
transparence des certificats</title>
<summary>
- <p><code>ctlogconfig</code> est un utilitaire permettant de créer et
- maintenir une base de données pour la configuration du service de
+ <p><code>ctlogconfig</code> est un utilitaire permettant de créer et
+ maintenir une base de données pour la configuration du service de
transparence des certificats utilisable par le module
- <module>mod_ssl_ct</module> ; nous nous référerons à ce service
+ <module>mod_ssl_ct</module> ; nous nous référerons à ce service
sous le terme "log" dans la suite de cette documentation.</p>
- <p>Avant d'aller plus loin, et si ce n'est déjà fait, veuillez
+ <p>Avant d'aller plus loin, et si ce n'est déjà fait, veuillez
consulter le document <a
href="../mod/mod_ssl_ct.html#logconf">Configuration des logs</a>
dans la documentation du module <module>mod_ssl_ct</module>.</p>
<seealso><module>mod_ssl_ct</module></seealso>
<section id="synopsis">
- <title>Exemples et définitions</title>
+ <title>Exemples et définitions</title>
<p><code>
<strong>ctlogconfig</strong> <em>/path/to/db</em> <strong>dump</strong>
</code></p>
<dl>
<dt><em>log-id</em></dt>
- <dd>Il s'agit de l'identifiant du log qui est généré en effectuant
- un hash SHA-256 au format hexadécimal de la clé publique du log.
- La taille de cette chaîne est de 64 caractères. </dd>
+ <dd>Il s'agit de l'identifiant du log qui est généré en effectuant
+ un hash SHA-256 au format hexadécimal de la clé publique du log.
+ La taille de cette chaîne est de 64 caractères. </dd>
<dt><em>record-id</em></dt>
- <dd>Il s'agit du numéro d'enregistrement dans la base de données,
+ <dd>Il s'agit du numéro d'enregistrement dans la base de données,
tel qu'il s'affiche avec la sous-commande <strong>dump</strong>,
- préfixé par le caractère <strong>#</strong>. Par exemple,
- <strong>#4</strong> renvoie au quatrième enregistrement de la base
- de données (utilisez le mécanisme d'échappement du shell si
- nécessaire).</dd>
+ préfixé par le caractère <strong>#</strong>. Par exemple,
+ <strong>#4</strong> renvoie au quatrième enregistrement de la base
+ de données (utilisez le mécanisme d'échappement du shell si
+ nécessaire).</dd>
<dt><em>/path/to/public-key.pem</em></dt>
- <dd>Il s'agit du chemin vers le fichier contenant la clé publique du
- log au format PEM. En effet, la clé publique n'est pas stockée dans la base de
- données, et le fichier ne peut donc pas être supprimé jusqu'à ce que
- la donnée qui y fait référence dans la base de données soit
- supprimée ou modifiée.</dd>
+ <dd>Il s'agit du chemin vers le fichier contenant la clé publique du
+ log au format PEM. En effet, la clé publique n'est pas stockée dans la base de
+ données, et le fichier ne peut donc pas être supprimé jusqu'à ce que
+ la donnée qui y fait référence dans la base de données soit
+ supprimée ou modifiée.</dd>
<dt><em>min-timestamp</em>, <em>max-timestamp</em></dt>
- <dd>Un repère de temps (timestamp) est un temps exprimé en
+ <dd>Un repère de temps (timestamp) est un temps exprimé en
millisecondes depuis le temps epoch, sans tenir compte des secondes
- sautées. C'est le format de temps utilisé dans les SCTs. Le repère
- de temps doit être fourni sous la forme d'un nombre décimal.
+ sautées. C'est le format de temps utilisé dans les SCTs. Le repère
+ de temps doit être fourni sous la forme d'un nombre décimal.
<br />
- Spécifiez <strong><code>-</code></strong> pour un des repères de
- temps s'il n'est pas connu. Par exemple, lorsque vous définissez le
- repère de temps minimum valide pour un log qui reste valide,
- spécifiez <strong><code>-</code></strong> pour
+ Spécifiez <strong><code>-</code></strong> pour un des repères de
+ temps s'il n'est pas connu. Par exemple, lorsque vous définissez le
+ repère de temps minimum valide pour un log qui reste valide,
+ spécifiez <strong><code>-</code></strong> pour
<em>max-timestamp</em>.
<br />
- Les SCTs reçu par le mandataire depuis ce log seront invalides si le
- repère de temps est plus ancien que <em>min-timestamp</em> ou plus
- récent que <em>max-timestamp</em>.</dd>
+ Les SCTs reçu par le mandataire depuis ce log seront invalides si le
+ repère de temps est plus ancien que <em>min-timestamp</em> ou plus
+ récent que <em>max-timestamp</em>.</dd>
</dl>
<title>Commandes</title>
<dl>
<dt>dump</dt>
- <dd>Affiche les éléments de configuration de la base de données.
+ <dd>Affiche les éléments de configuration de la base de données.
L'identifiant des enregistrements que cette commande affiche peut
- servir de référence pour les enregistrements devant être affectés
+ servir de référence pour les enregistrements devant être affectés
par les autres commandes.</dd>
<dt>configure-public-key</dt>
- <dd>Ajoute une clé publique pour un log de la base de données ou
- modifie la clé publique d'un log existant. La clé publique d'un log
+ <dd>Ajoute une clé publique pour un log de la base de données ou
+ modifie la clé publique d'un log existant. La clé publique d'un log
permet de valider la signature des SCTs (Signed certificate
- Timestamp) reçus par un mandataire depuis un serveur d'arrière-plan
- (La base de données sera créée si elle n'existe pas encore).</dd>
+ Timestamp) reçus par un mandataire depuis un serveur d'arrière-plan
+ (La base de données sera créée si elle n'existe pas encore).</dd>
<dt>configure-url</dt>
- <dd>Ajoute une URL pour un log de la base de données ou modifie
+ <dd>Ajoute une URL pour un log de la base de données ou modifie
l'URL d'un log existant. L'URL d'un log permet de soumettre des
- certificats de serveur à ce dernier afin d'obtenir des SCTs qui
- pourront être envoyés aux clients (La base de données sera créée si
+ certificats de serveur à ce dernier afin d'obtenir des SCTs qui
+ pourront être envoyés aux clients (La base de données sera créée si
elle n'existe pas encore).</dd>
<dt>valid-time-range</dt>
- <dd>Cette commande permet de définir le temps de validation minimum
- et/ou maximum pour un log. Les SCTs en provenance du log possédant
- un repère de temps en dehors de la plage définie seront rejetés.
- Utilisez <code>-</code> pour un temps non défini (La base de données
- sera créée si elle n'existe pas encore).</dd>
+ <dd>Cette commande permet de définir le temps de validation minimum
+ et/ou maximum pour un log. Les SCTs en provenance du log possédant
+ un repère de temps en dehors de la plage définie seront rejetés.
+ Utilisez <code>-</code> pour un temps non défini (La base de données
+ sera créée si elle n'existe pas encore).</dd>
<dt>trust</dt>
<dd>Marque un log comme digne de confiance, ce qui est la situation
- par défaut. Cette command permet de marquer un log comme digne de
- confiance, alors que ce n'était pas le cas auparavant (La base de
- données sera créée si elle n'existe pas encore).</dd>
+ par défaut. Cette command permet de marquer un log comme digne de
+ confiance, alors que ce n'était pas le cas auparavant (La base de
+ données sera créée si elle n'existe pas encore).</dd>
<dt>distrust</dt>
<dd>Marque un log comme non digne de confiance (La base de
- données sera créée si elle n'existe pas encore).</dd>
+ données sera créée si elle n'existe pas encore).</dd>
<dt>forget</dt>
- <dd>Supprime de la base de données les informations relatives
- à un log.</dd>
+ <dd>Supprime de la base de données les informations relatives
+ à un log.</dd>
</dl>
</section>
serveur TLS et mandataire. Le serveur TLS doit obtenir des SCTs de la
part de certains logs connus afin de pouvoir les transmettre aux
clients, et le mandataire doit pouvoir valider la signature des SCTs
- en provenance des serveurs d'arrière-plan.</p>
+ en provenance des serveurs d'arrière-plan.</p>
- <p>Nous allons tout d'abord définir les URLs des logs où les
- certificats sont enregistrés :</p>
+ <p>Nous allons tout d'abord définir les URLs des logs où les
+ certificats sont enregistrés :</p>
<example>
<highlight language="sh">
</highlight>
</example>
- <p>Nous pouvons maintenant attribuer une clé publique à un log où le
- certificat de notre seul serveur d'arrière-plan est publié. Dans notre
+ <p>Nous pouvons maintenant attribuer une clé publique à un log où le
+ certificat de notre seul serveur d'arrière-plan est publié. Dans notre
cas, il s'agit du log dont l'URL est http://log2.example.com/, et qui
- a déjà été configuré.</p>
+ a déjà été configuré.</p>
<example>
<highlight language="sh">
<manualpage metafile="firehose.xml.meta">
<parentdocument href="./">Programs</parentdocument>
-<title>firehose - Démultiplexe un flux firehose</title>
+<title>firehose - Démultiplexe un flux firehose</title>
<summary>
- <p><code>firehose</code> démultiplexe le flux de connexions
- multiplexées donné, et enregistre chacune d'entre elles dans un
+ <p><code>firehose</code> démultiplexe le flux de connexions
+ multiplexées donné, et enregistre chacune d'entre elles dans un
fichier individuel.</p>
- <p>Lors de son enregistrement, chaque connexion est placée dans un
- fichier dédié dont le nom est généré à partir de l'UUID de la
- connexion dans le flux. Si le flux comporte des requêtes et des
- réponses, ces dernières feront l'objet de fichiers séparés.</p>
+ <p>Lors de son enregistrement, chaque connexion est placée dans un
+ fichier dédié dont le nom est généré à partir de l'UUID de la
+ connexion dans le flux. Si le flux comporte des requêtes et des
+ réponses, ces dernières feront l'objet de fichiers séparés.</p>
- <p>Si le paramètre optionnel prefix est spécifié, les connexions qui
- commencent par le préfixe donné seront incluses. Le préfixe doit
- correspondre exactement au premier fragment pour un résultat de
+ <p>Si le paramètre optionnel prefix est spécifié, les connexions qui
+ commencent par le préfixe donné seront incluses. Le préfixe doit
+ correspondre exactement au premier fragment pour un résultat de
comparaison positif.</p>
</summary>
<section id="synopsis"><title>Syntaxe</title>
<p><code><strong>firehose</strong>
- [ -<strong>f</strong> <var>entrée</var> ]
- [ -<strong>o</strong> <var>répertoire-sortie</var> ]
+ [ -<strong>f</strong> <var>entrée</var> ]
+ [ -<strong>o</strong> <var>répertoire-sortie</var> ]
[ -<strong>u</strong> <var>uuid</var> ]
[ -<strong>h</strong> ]
[ --<strong>version</strong> ]
- [<var>préfixe1</var> [...]]</code></p>
+ [<var>préfixe1</var> [...]]</code></p>
</section>
<section id="options"><title>Options</title>
<dl>
<dt><code>--file, -f <var>nom-fichier</var></code></dt>
- <dd>Fichier depuis lequel doit être lu le flux firehose. La valeur
- par défaut est stdin.</dd>
+ <dd>Fichier depuis lequel doit être lu le flux firehose. La valeur
+ par défaut est stdin.</dd>
- <dt><code>--output-directory, -o </code> <var>répertoire-sortie</var></dt>
- <dd>Répertoire dans lequel les connexions démultiplexées doivent
- être enregistrées.</dd>
+ <dt><code>--output-directory, -o </code> <var>répertoire-sortie</var></dt>
+ <dd>Répertoire dans lequel les connexions démultiplexées doivent
+ être enregistrées.</dd>
<dt><code>--uuid, -u</code> <var>uuid</var></dt>
- <dd>L'UUID de la connexion à démultiplexer. Plusieurs UUID peuvent
- être spécifiés. Par défaut, tout les UUID seront démultiplexés.</dd>
+ <dd>L'UUID de la connexion à démultiplexer. Plusieurs UUID peuvent
+ être spécifiés. Par défaut, tout les UUID seront démultiplexés.</dd>
<dt><code>--help, -h</code></dt>
<dd>Ce texte d'aide.</dd>
<manualpage metafile="log_server_status.xml.meta">
<parentdocument href="./">Programs</parentdocument>
-<title>log_server_status - Enregistrement périodique de l'état du serveur</title>
+<title>log_server_status - Enregistrement périodique de l'état du serveur</title>
<summary>
- <p>Ce script perl a été conçu pour être exécuté à intervalles
- réguliers via un déclencheur de type cron. Il se connecte au serveur
- pour en extraire des informations quant à son état. Il formate ces
+ <p>Ce script perl a été conçu pour être exécuté à intervalles
+ réguliers via un déclencheur de type cron. Il se connecte au serveur
+ pour en extraire des informations quant à son état. Il formate ces
informations sous la forme d'une seule ligne qu'il enregistre dans
- un fichier. Vous devez éditer la valeur des variables en tête de
- script afin de définir le chemin du fichier de sortie. Pour que ce
+ un fichier. Vous devez éditer la valeur des variables en tête de
+ script afin de définir le chemin du fichier de sortie. Pour que ce
script puisse fonctionner, <module>mod_status</module> doit au
- préalable être chargé et configuré.</p>
+ préalable être chargé et configuré.</p>
</summary>
<section id="configure"><title>Mode d'emploi</title>
my $wherelog = "/usr/local/apache2/logs/"; # Le fichier de sortie sera
# du style "/usr/local/apache2/logs/19960312"
my $server = "localhost"; # Nom du serveur, par exemple "www.foo.com"
-my $port = "80"; # Port d'écoute du serveur
-my $request = "/server-status/?auto"; # Requête à soumettre
+my $port = "80"; # Port d'écoute du serveur
+my $request = "/server-status/?auto"; # Requête à soumettre
</highlight>
<p>Ces variables doivent contenir des valeurs correctes, et le
-gestionnaire <code>/server-status</code> doit être configuré pour le
-répertoire considéré. En outre, l'utilisateur qui exécute le script doit
-avoir les droits d'écriture sur le chemin du fichier de sortie.</p>
+gestionnaire <code>/server-status</code> doit être configuré pour le
+répertoire considéré. En outre, l'utilisateur qui exécute le script doit
+avoir les droits d'écriture sur le chemin du fichier de sortie.</p>
-<p>L'exécution périodique du script via cron permet d'obtenir un jeu de
-rapports d'état qui pourra être utilisé à des fins d'analyse
+<p>L'exécution périodique du script via cron permet d'obtenir un jeu de
+rapports d'état qui pourra être utilisé à des fins d'analyse
statistique.</p>
</section>
<summary>
- <p>Cette page contenait la documentation de programmes qui possèdent
+ <p>Cette page contenait la documentation de programmes qui possèdent
maintenant leurs propres pages de documentation. Merci de bien
- vouloir mettre à jour vos liens.</p>
+ vouloir mettre à jour vos liens.</p>
<p><program>log_server_status</program></p>
<p><program>split-logfile</program></p>
<summary>
<p>Ce script perl permet d'extraire un journal pour chaque serveur
- virtuel à partir d'un journal d'accès global du serveur web. Pour
+ virtuel à partir d'un journal d'accès global du serveur web. Pour
que ce script fonctionne, le premier champ de chaque ligne du
- journal global doit contenir l'identité du serveur virtuel ; ce
- champ aura été ajouté à la directive <directive
+ journal global doit contenir l'identité du serveur virtuel ; ce
+ champ aura été ajouté à la directive <directive
module="mod_log_config">LogFormat</directive> via la variable
"<code>%v</code>".
</p>
<section id="split-logfile"><title>Mode d'emploi</title>
- <p>Création d'un fichier journal comportant l'identité du serveur
- virtuel considéré :</p>
+ <p>Création d'un fichier journal comportant l'identité du serveur
+ virtuel considéré :</p>
<highlight language="config">
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_plus_vhost
CustomLog "logs/access_log" combined_plus_vhost
</highlight>
- <p>Un fichier journal sera créé dans le répertoire à partir duquel
- vous exécutez le script pour chaque serveur virtuel qui apparaît
- dans le journal global. Ces fichiers journaux seront nommés à partir
- du nom du serveur virtuel considéré, avec l'extension
+ <p>Un fichier journal sera créé dans le répertoire à partir duquel
+ vous exécutez le script pour chaque serveur virtuel qui apparaît
+ dans le journal global. Ces fichiers journaux seront nommés à partir
+ du nom du serveur virtuel considéré, avec l'extension
<code>.log</code>.</p>
- <p>Le fichier journal global est lu depuis l'entrée standard stdin.
- Les entrées de ce journal sont alors ajoutées au journal du serveur
+ <p>Le fichier journal global est lu depuis l'entrée standard stdin.
+ Les entrées de ce journal sont alors ajoutées au journal du serveur
virtuel correspondant.</p>
<example>split-logfile < access_log</example>
<manualpage metafile="suexec.xml.meta">
<parentdocument href="./">Programs</parentdocument>
-<title>suexec - Change d'utilisateur avant l'exécution d'un programme
+<title>suexec - Change d'utilisateur avant l'exécution d'un programme
externe</title>
<summary>
<p><program>suexec</program> permet au serveur HTTP Apache de changer
- d'utilisateur avant d'exécuter un programme CGI. Pour ce faire, il
- doit être exécuté par <code>root</code>. A cet effet, comme le
- démon HTTP ne s'exécute en général pas en tant que
- <code>root</code>, l'exécutable <program>suexec</program> doit posséder
- le bit setuid et avoir comme propriétaire <code>root</code>. Seul
- <code>root</code> doit en posséder les droits en écriture.</p>
+ d'utilisateur avant d'exécuter un programme CGI. Pour ce faire, il
+ doit être exécuté par <code>root</code>. A cet effet, comme le
+ démon HTTP ne s'exécute en général pas en tant que
+ <code>root</code>, l'exécutable <program>suexec</program> doit posséder
+ le bit setuid et avoir comme propriétaire <code>root</code>. Seul
+ <code>root</code> doit en posséder les droits en écriture.</p>
- <p>Pour plus d'informations à propos des concepts et du modèle de
- sécurité du programme suexec, veuillez vous reporter à sa
+ <p>Pour plus d'informations à propos des concepts et du modèle de
+ sécurité du programme suexec, veuillez vous reporter à sa
documentation : <a
href="http://httpd.apache.org/docs/&httpd.docs;/suexec.html"
>http://httpd.apache.org/docs/&httpd.docs;/suexec.html</a>.</p>
<dl>
<dt><code>-V</code></dt>
-<dd>Si vous êtes <code>root</code>, cette option permet d'afficher les
+<dd>Si vous êtes <code>root</code>, cette option permet d'afficher les
options de compilation du programme <program>suexec</program>. Pour des
-raisons de sécurité, toutes les options de configuration ne sont
-modifiables qu'à la compilation.</dd>
+raisons de sécurité, toutes les options de configuration ne sont
+modifiables qu'à la compilation.</dd>
</dl>
</section>
<manualpage metafile="server-wide.xml.meta">
- <title>Configuration à l'échelle du serveur</title>
+ <title>Configuration à l'échelle du serveur</title>
<summary>
<p>Ce document explique le fonctionnement de certaines directives du serveur
-de base qui sont utilisées pour configurer les opérations élémentaires du
+de base qui sont utilisées pour configurer les opérations élémentaires du
serveur.</p>
</summary>
</related>
<p>Les directives <directive module="core">ServerAdmin</directive> et
- <directive module="core">ServerTokens</directive> contrôlent la nature des
- informations à propos du serveur qui seront affichées dans les documents
- générés par le serveur comme les messages d'erreur. La directive
- <directive module="core">ServerTokens</directive> définit la valeur du
- champ d'en-tête de la réponse du serveur HTTP.</p>
+ <directive module="core">ServerTokens</directive> contrôlent la nature des
+ informations à propos du serveur qui seront affichées dans les documents
+ générés par le serveur comme les messages d'erreur. La directive
+ <directive module="core">ServerTokens</directive> définit la valeur du
+ champ d'en-tête de la réponse du serveur HTTP.</p>
<p>Le serveur utilise les directives
<directive module="core">ServerName</directive>,
<directive module="core">UseCanonicalName</directive> et
<directive module="core">UseCanonicalPhysicalPort</directive> pour
- déterminer la manière de construire des URLs vers ses propres ressources.
- Par exemple, quand un client émet une requête vers un répertoire, mais
- n'ajoute pas le slash final au nom du répertoire, httpd doit rediriger le
+ déterminer la manière de construire des URLs vers ses propres ressources.
+ Par exemple, quand un client émet une requête vers un répertoire, mais
+ n'ajoute pas le slash final au nom du répertoire, httpd doit rediriger le
client vers le nom complet incluant le slash final afin que le client
- puisse résoudre correctement les références relatives présentes dans
+ puisse résoudre correctement les références relatives présentes dans
le document.</p>
</section>
</directivelist>
</related>
- <p>Ces directives contrôlent la localisation des différents fichiers
- nécessaires au bon fonctionnement de httpd. Quand le chemin utilisé ne
+ <p>Ces directives contrôlent la localisation des différents fichiers
+ nécessaires au bon fonctionnement de httpd. Quand le chemin utilisé ne
commence pas par un slash (/), la localisation des fichiers est relative
- à la valeur de la directive
+ à la valeur de la directive
<directive module="core">ServerRoot</directive>. Soyez prudent avec la
- localisation de fichiers dans des répertoires où les utilisateurs non root
- ont les droits en écriture. Voir la documention sur les
- <a href="misc/security_tips.html#serverroot">Conseils à propos
- de la sécurité</a> pour plus de détails.</p>
+ localisation de fichiers dans des répertoires où les utilisateurs non root
+ ont les droits en écriture. Voir la documention sur les
+ <a href="misc/security_tips.html#serverroot">Conseils à propos
+ de la sécurité</a> pour plus de détails.</p>
</section>
<section id="resource">
</related>
<p>Les directives <directive>LimitRequest</directive>* permettent de
- limiter la quantité de ressources consommées par httpd pour le traitement
- des requêtes des clients. Cette limitation permet de minimiser les effets
- de certains types d'attaques par déni de service.</p>
+ limiter la quantité de ressources consommées par httpd pour le traitement
+ des requêtes des clients. Cette limitation permet de minimiser les effets
+ de certains types d'attaques par déni de service.</p>
<p>Les directives <directive>RLimit</directive>* permettent de limiter la
- quantité de ressources utilisable par les processus initiés (forked) par
- les processus enfants httpd. Elles permettent en particulier de contrôler
- les ressources utilisées par les scripts CGI et les commandes exec des
- "Inclusions côté serveur" (Server Side Includes ou SSI).</p>
+ quantité de ressources utilisable par les processus initiés (forked) par
+ les processus enfants httpd. Elles permettent en particulier de contrôler
+ les ressources utilisées par les scripts CGI et les commandes exec des
+ "Inclusions côté serveur" (Server Side Includes ou SSI).</p>
<p>La directive <directive module="mpm_common">ThreadStackSize</directive>
- permet sur certaines plates-formes de contrôler la taille de la pile.</p>
+ permet sur certaines plates-formes de contrôler la taille de la pile.</p>
</section>
<section id="implementation">
- <title>Choix d'implémentation</title>
+ <title>Choix d'implémentation</title>
<related>
<directivelist>
</related>
<p>La directive <directive>Mutex</directive> permet de modifier
- l'implémentation sous-jacente des mutex, afin de résoudre les
- problèmes de fonctionnement ou de performance dus au choix par
- défaut d'<glossary>APR</glossary>.</p>
+ l'implémentation sous-jacente des mutex, afin de résoudre les
+ problèmes de fonctionnement ou de performance dus au choix par
+ défaut d'<glossary>APR</glossary>.</p>
</section>
</manualpage>
<summary>
<p>Le module <module>mod_ssl</module> du serveur HTTP Apache fournit une
-interface avec la bibliothèque <a
+interface avec la bibliothèque <a
href="http://www.openssl.org/">OpenSSL</a>, qui permet d'effectuer un
-chiffrement fort en s'appuyant sur les protocoles "Couche Points d'accès
-Sécurisés" (Secure Sockets Layer - SSL) et "Sécurité de la Couche Transport"
+chiffrement fort en s'appuyant sur les protocoles "Couche Points d'accès
+Sécurisés" (Secure Sockets Layer - SSL) et "Sécurité de la Couche Transport"
(Transport Layer Security - TLS).</p>
</summary>
<section id="documentation"><title>Documentation</title>
<ul>
<li><a href="ssl_howto.html">Comment configurer SSL ?</a></li>
-<li><a href="ssl_intro.html">Introduction à SSL</a></li>
-<li><a href="ssl_compat.html">Compatibilité</a></li>
+<li><a href="ssl_intro.html">Introduction à SSL</a></li>
+<li><a href="ssl_compat.html">Compatibilité</a></li>
<li><a href="ssl_faq.html">Foire aux questions</a></li>
<li><a href="../glossary.html">Glossaire</a></li>
</ul>
</section>
<section id="mod-ssl"><title>mod_ssl</title>
-<p>La documentation complète sur les directives et les variables
+<p>La documentation complète sur les directives et les variables
d'environnement fournies par ce module se trouve dans la
-<a href="../mod/mod_ssl.html">documentation de référence de mod_ssl</a>.
+<a href="../mod/mod_ssl.html">documentation de référence de mod_ssl</a>.
</p>
</section>
<manualpage metafile="ssl_compat.xml.meta">
<parentdocument href="./">SSL/TLS</parentdocument>
- <title>Chiffrement fort SSL/TLS : Compatibilité</title>
+ <title>Chiffrement fort SSL/TLS : Compatibilité</title>
<summary>
-<p>Ce document couvre la compatibilité ascendante entre mod_ssl et
+<p>Ce document couvre la compatibilité ascendante entre mod_ssl et
d'autres solutions SSL. mod_ssl n'est pas la seule solution SSL pour Apache ;
-quatre autres produits sont (ou ont été) également disponibles :
+quatre autres produits sont (ou ont été) également disponibles :
<a href="http://www.apache-ssl.org/">Apache-SSL</a>, le produit libre de
-Ben Laurie (d'où mod_ssl est issu à l'origine en 1998), Secure
-Web Server, un produit commercial de Red Hat (basé sur mod_ssl),
+Ben Laurie (d'où mod_ssl est issu à l'origine en 1998), Secure
+Web Server, un produit commercial de Red Hat (basé sur mod_ssl),
Raven SSL Module, un produit commercial
-de Covalent (basé lui aussi sur mod_ssl), et enfin <a
+de Covalent (basé lui aussi sur mod_ssl), et enfin <a
href="http://www.redhat.com/explore/stronghold/">Stronghold</a>, produit
-commercial de C2Net et maintenant de Red Hat, (basé sur une branche
-d'évolution différente appelée Sioux jusqu'à Stronghold 2.x et basé sur
+commercial de C2Net et maintenant de Red Hat, (basé sur une branche
+d'évolution différente appelée Sioux jusqu'à Stronghold 2.x et basé sur
mod_ssl depuis Stronghold 3.x).</p>
-<p>En plus de ses fonctionnalités propres, mod_ssl rassemble la plupart de
-celles des autres solutions SSL, si bien qu'il est très simple de
+<p>En plus de ses fonctionnalités propres, mod_ssl rassemble la plupart de
+celles des autres solutions SSL, si bien qu'il est très simple de
migrer depuis un module plus ancien vers mod_ssl. Les directives de
-configuration et les noms des variables d'environnement utilisés par les
-solutions SSL plus anciennes diffèrent de ceux qu'utilise mod_ssl ;
-les tableaux de correspondance ci-dessous fournissent les équivalences
-de termes utilisés par mod_ssl.</p>
+configuration et les noms des variables d'environnement utilisés par les
+solutions SSL plus anciennes diffèrent de ceux qu'utilise mod_ssl ;
+les tableaux de correspondance ci-dessous fournissent les équivalences
+de termes utilisés par mod_ssl.</p>
</summary>
<section id="configuration"><title>Directives de configuration</title>
<p>La correspondance entre les directives de configuration qu'utilise
Apache-SSL 1.x et mod_ssl 2.0.x est fournie dans le <a href="#table1">Tableau
1</a>. La correspondance depuis Sioux 1.x et Stronghold 2.x n'est que
-partielle car certaines fonctionnalités de ces interfaces ne sont pas
-supportées par mod_ssl.</p>
+partielle car certaines fonctionnalités de ces interfaces ne sont pas
+supportées par mod_ssl.</p>
<section id="table1">
<column width=".32"/></columnspec>
<tr><th>Ancienne directive</th><th>Directive mod_ssl</th><th>Commentaires</th></tr>
-<tr><th colspan="3">Compatibilité entre Apache-SSL 1.x et mod_ssl 2.0.x :</th></tr>
+<tr><th colspan="3">Compatibilité entre Apache-SSL 1.x et mod_ssl 2.0.x :</th></tr>
<tr><td><code>SSLEnable</code></td><td><code>SSLEngine on</code></td><td>plus compacte</td></tr>
<tr><td><code>SSLDisable</code></td><td><code>SSLEngine off</code></td><td>plus compacte</td></tr>
<tr><td><code>SSLLogFile</code>
-<em>file</em></td><td><code></code></td><td>Utilisez plutôt la directive
+<em>file</em></td><td><code></code></td><td>Utilisez plutôt la directive
de niveau module <directive module="core">LogLevel</directive>.</td></tr>
-<tr><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renommée</td></tr>
+<tr><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renommée</td></tr>
<tr><td><code>SSLRequireCipher</code> <em>c1</em> ...</td><td><code>SSLRequire %{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...}</code></td><td>plus générale</td></tr>
+...}</code></td><td>plus générale</td></tr>
<tr><td><code>SSLBanCipher</code> <em>c1</em> ...</td><td><code>SSLRequire not (%{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...})</code></td><td>plus générale</td></tr>
-<tr><td><code>SSLFakeBasicAuth</code></td><td><code>SSLOptions +FakeBasicAuth</code></td><td>rassemblées</td></tr>
-<tr><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>fonctionnalité supprimée</td></tr>
+...})</code></td><td>plus générale</td></tr>
+<tr><td><code>SSLFakeBasicAuth</code></td><td><code>SSLOptions +FakeBasicAuth</code></td><td>rassemblées</td></tr>
+<tr><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>fonctionnalité supprimée</td></tr>
-<tr><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>fonctionnalité supprimée</td></tr>
-<tr><th colspan="3">Compatibilité avec Apache-SSL 1.x :</th></tr>
-<tr><td><code>SSLExportClientCertificates</code></td><td><code>SSLOptions +ExportCertData</code></td><td>rassemblées</td></tr>
-<tr><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>fonctionnalité supprimée</td></tr>
+<tr><th colspan="3">Compatibilité avec Apache-SSL 1.x :</th></tr>
+<tr><td><code>SSLExportClientCertificates</code></td><td><code>SSLOptions +ExportCertData</code></td><td>rassemblées</td></tr>
+<tr><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><th colspan="3">Compatibilité avec Sioux 1.x :</th></tr>
-<tr><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renommée</td></tr>
+<tr><th colspan="3">Compatibilité avec Sioux 1.x :</th></tr>
+<tr><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renommée</td></tr>
<tr><td><code>SSL_Log</code>
-<em>file</em></td><td><code>-</code></td><td>Utilisez plutôt la directive
+<em>file</em></td><td><code>-</code></td><td>Utilisez plutôt la directive
de niveau module <directive module="core">LogLevel</directive></td></tr>
-<tr><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renommée</td></tr>
-<tr><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLPassPhraseDialog</td></tr>
-<tr><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLSessionCache</td></tr>
-<tr><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLRequire</td></tr>
+<tr><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLPassPhraseDialog</td></tr>
+<tr><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLSessionCache</td></tr>
+<tr><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>pas de véritable équivalent ; utiliser SSLRequire</td></tr>
-<tr><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><th colspan="3">Compatibilité avec Stronghold 2.x :</th></tr>
-<tr><td><code>StrongholdAccelerator</code> <em>engine</em></td><td><code>SSLCryptoDevice</code> <em>engine</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><th colspan="3">Compatibilité avec Stronghold 2.x :</th></tr>
+<tr><td><code>StrongholdAccelerator</code> <em>engine</em></td><td><code>SSLCryptoDevice</code> <em>engine</em></td><td>renommée</td></tr>
<tr><td><code>StrongholdKey</code> <em>dir</em></td><td>-</td><td>sans objet</td></tr>
<tr><td><code>StrongholdLicenseFile</code> <em>dir</em></td><td>-</td><td>sans objet</td></tr>
-<tr><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renommée</td></tr>
-<tr><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renommée</td></tr>
+<tr><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renommée</td></tr>
+<tr><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renommée</td></tr>
-<tr><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renommée</td></tr>
-<tr><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renommée</td></tr>
-<tr><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renommée</td></tr>
+<tr><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renommée</td></tr>
+<tr><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
-<tr><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td><code>SSLProxyMachineCertificatePath</code> <em>dir</em></td><td>renommée</td></tr>
-<tr><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td><code>SSLProxyMachineCertificateFile</code> <em>file</em></td><td>renommée</td></tr>
+<tr><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>fonctionnalité non supportée</td></tr>
+<tr><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td><code>SSLProxyMachineCertificatePath</code> <em>dir</em></td><td>renommée</td></tr>
+<tr><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td><code>SSLProxyMachineCertificateFile</code> <em>file</em></td><td>renommée</td></tr>
-<tr><td><code>SSLProxyCipherList</code> <em>spec</em></td><td><code>SSLProxyCipherSpec</code> <em>spec</em></td><td>renommée</td></tr>
+<tr><td><code>SSLProxyCipherList</code> <em>spec</em></td><td><code>SSLProxyCipherSpec</code> <em>spec</em></td><td>renommée</td></tr>
</table>
</section>
</section>
<section id="variables"><title>Variables d'environnement</title>
-<p>La correspondance entre les noms des variables d'environnement utilisés par
-les solutions SSL plus anciennes et les noms utilisés par mod_ssl est fournie
+<p>La correspondance entre les noms des variables d'environnement utilisés par
+les solutions SSL plus anciennes et les noms utilisés par mod_ssl est fournie
dans le <a href="#table2">Tableau 2</a>.</p>
<section id="table2">
-<title>Tableau 2: Dérivation des variables d'environnement</title>
+<title>Tableau 2: Dérivation des variables d'environnement</title>
<table style="zebra">
<columnspec><column width=".38"/><column width=".38"/>
<column width=".2"/></columnspec>
<tr><th>Ancienne variable</th><th>Variable mod_ssl</th><th>Commentaires</th></tr>
-<tr><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renommée</td></tr>
-<tr><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renommée</td></tr>
-<tr><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renommée</td></tr>
-<tr><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
-<tr><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renommée</td></tr>
-
-<tr><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renommée</td></tr>
-
-<tr><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renommée</td></tr>
-<tr><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-
-<tr><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-
-<tr><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renommée</td></tr>
+<tr><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renommée</td></tr>
+<tr><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renommée</td></tr>
+<tr><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
+<tr><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renommée</td></tr>
+
+<tr><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renommée</td></tr>
+
+<tr><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renommée</td></tr>
+<tr><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+
+<tr><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+
+<tr><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
+<tr><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Non supportée par mod_ssl</td></tr>
</table>
</section>
</section>
<section id="customlog"><title>Fonctions de personnalisation des journaux</title>
-<p>Quand mod_ssl est activé, le <a
+<p>Quand mod_ssl est activé, le <a
href="../mod/mod_log_config.html#formats">Format de journal courant
-(Custom Log Format)</a> du module <module>mod_log_config</module> possède
-des fonctions supplémentaires comme indiqué dans le chapitre de référence.
-En plus de la fonction de format étendu
+(Custom Log Format)</a> du module <module>mod_log_config</module> possède
+des fonctions supplémentaires comme indiqué dans le chapitre de référence.
+En plus de la fonction de format étendu
``<code>%{</code><em>varname</em><code>}x</code>'' que l'on peut utiliser pour
extraire le contenu d'une variable fournie par n'importe quel module,
la fonction
de format cryptographique ``<code>%{</code><em>name</em><code>}c</code>'' a
-été ajoutée à des fins de compatibilité ascendante. Les appels de fonctions
-actuellement implémentés sont énumérés dans le
+été ajoutée à des fins de compatibilité ascendante. Les appels de fonctions
+actuellement implémentés sont énumérés dans le
<a href="#table3">Tableau 3</a>.</p>
<section id="table3">
<tr><td><code>%...{version}c</code></td> <td>Version du protocole SSL</td></tr>
<tr><td><code>%...{cipher}c</code></td> <td>Chiffrement SSL</td></tr>
<tr><td><code>%...{subjectdn}c</code></td> <td>Nom distinctif du sujet du certificat du client</td></tr>
-<tr><td><code>%...{issuerdn}c</code></td> <td>Nom distinctif de l'émetteur du certificat du client</td></tr>
-<tr><td><code>%...{errcode}c</code></td> <td>Erreur lors de la vérification du certificat (numérique)</td></tr>
+<tr><td><code>%...{issuerdn}c</code></td> <td>Nom distinctif de l'émetteur du certificat du client</td></tr>
+<tr><td><code>%...{errcode}c</code></td> <td>Erreur lors de la vérification du certificat (numérique)</td></tr>
-<tr><td><code>%...{errstr}c</code></td> <td>Erreur lors de la vérification du certificat (chaîne de caractères)</td></tr>
+<tr><td><code>%...{errstr}c</code></td> <td>Erreur lors de la vérification du certificat (chaîne de caractères)</td></tr>
</table>
</section>
</section>
<summary>
<blockquote>
-<p>Le sage n'apporte pas de bonnes réponses, il pose les bonnes questions</p>
+<p>Le sage n'apporte pas de bonnes réponses, il pose les bonnes questions</p>
<p class="cite">-- <cite>Claude Levi-Strauss</cite></p>
</blockquote>
<section id="installation"><title>Installation</title>
<ul>
-<li><a href="#mutex">Pourquoi le démarrage d'Apache provoque-t-il des
+<li><a href="#mutex">Pourquoi le démarrage d'Apache provoque-t-il des
erreurs de permission en rapport avec SSLMutex ?</a></li>
-<li><a href="#entropy">Pourquoi mod_ssl s'arrête-t-il avec l'erreur
-"Failed to generate temporary 512 bit RSA private key" au démarrage
+<li><a href="#entropy">Pourquoi mod_ssl s'arrête-t-il avec l'erreur
+"Failed to generate temporary 512 bit RSA private key" au démarrage
d'Apache ?</a></li>
</ul>
-<section id="mutex"><title>Pourquoi le démarrage d'Apache provoque-t-il des
+<section id="mutex"><title>Pourquoi le démarrage d'Apache provoque-t-il des
erreurs de permission en rapport avec SSLMutex ?</title>
<p>Des erreurs telles que ``<code>mod_ssl: Child could not open
SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (avec l'erreur
- système qui suit) [...] System: Permission denied (errno: 13)</code>''
- sont souvent provoquées par des permissions trop restrictives sur les
- répertoires <em>parents</em>. Assurez-vous que tous les répertoires
+ système qui suit) [...] System: Permission denied (errno: 13)</code>''
+ sont souvent provoquées par des permissions trop restrictives sur les
+ répertoires <em>parents</em>. Assurez-vous que tous les répertoires
parents (ici <code>/opt</code>, <code>/opt/apache</code> et
- <code>/opt/apache/logs</code>) ont le bit x positionné au moins pour
- l'UID sous lequel les processus enfants d'Apache s'exécutent (voir la
+ <code>/opt/apache/logs</code>) ont le bit x positionné au moins pour
+ l'UID sous lequel les processus enfants d'Apache s'exécutent (voir la
directive <directive module="mod_unixd">User</directive>).</p>
</section>
-<section id="entropy"><title>Pourquoi mod_ssl s'arrête-t-il avec l'erreur
-"Failed to generate temporary 512 bit RSA private key" au démarrage
+<section id="entropy"><title>Pourquoi mod_ssl s'arrête-t-il avec l'erreur
+"Failed to generate temporary 512 bit RSA private key" au démarrage
d'Apache ?</title>
<p>Pour fonctionner correctement, les logiciels de cryptographie ont
- besoin d'une source de données aléatoires. De nombreux systèmes
- d'exploitation libres proposent un "périphérique source d'entropie"
- qui fournit ce service (il se nomme en général
- <code>/dev/random</code>). Sur d'autres systèmes, les applications
+ besoin d'une source de données aléatoires. De nombreux systèmes
+ d'exploitation libres proposent un "périphérique source d'entropie"
+ qui fournit ce service (il se nomme en général
+ <code>/dev/random</code>). Sur d'autres systèmes, les applications
doivent amorcer manuellement
- le Générateur de Nombres Pseudo-Aléatoires d'OpenSSL
- (Pseudo Random Number Generator -PRNG) à l'aide de données appropriées
- avant de générer des clés ou d'effectuer un chiffrement à clé
- publique. Depuis la version 0.9.5, les fonctions d'OpenSSL qui nécessitent
- des données aléatoires provoquent une erreur si le PRNG n'a pas été amorcé
- avec une source de données aléatoires d'au moins 128 bits.</p>
- <p>Pour éviter cette erreur, <module>mod_ssl</module> doit fournir
+ le Générateur de Nombres Pseudo-Aléatoires d'OpenSSL
+ (Pseudo Random Number Generator -PRNG) à l'aide de données appropriées
+ avant de générer des clés ou d'effectuer un chiffrement à clé
+ publique. Depuis la version 0.9.5, les fonctions d'OpenSSL qui nécessitent
+ des données aléatoires provoquent une erreur si le PRNG n'a pas été amorcé
+ avec une source de données aléatoires d'au moins 128 bits.</p>
+ <p>Pour éviter cette erreur, <module>mod_ssl</module> doit fournir
suffisamment d'entropie au PRNG pour lui permettre de fonctionner
- correctement. Ce niveau d'entropie est défini par la directive
+ correctement. Ce niveau d'entropie est défini par la directive
<directive module="mod_ssl">SSLRandomSeed</directive>.</p>
</section>
</section>
<section id="aboutconfig"><title>Configuration</title>
<ul>
-<li><a href="#parallel">Peut-on faire cohabiter HTTP et HTTPS sur le même
+<li><a href="#parallel">Peut-on faire cohabiter HTTP et HTTPS sur le même
serveur ?</a></li>
<li><a href="#ports">Quel port HTTPS utilise-t-il ?</a></li>
-<li><a href="#httpstest">Comment s'exprimer en langage HTTPS à des fins
+<li><a href="#httpstest">Comment s'exprimer en langage HTTPS à des fins
de test ?</a></li>
<li><a href="#hang">Pourquoi la communication se bloque-t-elle lorsque je
-me connecte à mon serveur Apache configuré pour SSL ?</a></li>
-<li><a href="#refused">Pourquoi, lorsque je tente d'accéder en HTTPS à mon
-serveur Apache+mod_ssl fraîchement installé, l'erreur ``Connection Refused''
+me connecte à mon serveur Apache configuré pour SSL ?</a></li>
+<li><a href="#refused">Pourquoi, lorsque je tente d'accéder en HTTPS à mon
+serveur Apache+mod_ssl fraîchement installé, l'erreur ``Connection Refused''
s'affiche-t-elle ?</a></li>
<li><a href="#envvars">Pourquoi les variables <code>SSL_XXX</code>
ne sont-elles pas disponibles dans mes scripts CGI et SSI ?</a></li>
HTTPS dans les hyperliens relatifs ?</a></li>
</ul>
-<section id="parallel"><title>Peut-on faire cohabiter HTTP et HTTPS sur le même
+<section id="parallel"><title>Peut-on faire cohabiter HTTP et HTTPS sur le même
serveur ?</title>
- <p>Oui. HTTP et HTTPS utilisent des ports différents (HTTP écoute le port
+ <p>Oui. HTTP et HTTPS utilisent des ports différents (HTTP écoute le port
80 et HTTPS le port 443), si bien qu'il n'y a pas de conflit direct entre
- les deux. Vous pouvez soit exécuter deux instances séparées du serveur,
- chacune d'entre elles écoutant l'un de ces ports, soit utiliser l'élégante
- fonctionnalité d'Apache que constituent les hôtes virtuels pour créer
- deux serveurs virtuels gérés par la même instance d'Apache - le
- premier serveur répondant en HTTP aux requêtes sur le port 80,
- le second répondant en HTTPS aux requêtes sur le port
+ les deux. Vous pouvez soit exécuter deux instances séparées du serveur,
+ chacune d'entre elles écoutant l'un de ces ports, soit utiliser l'élégante
+ fonctionnalité d'Apache que constituent les hôtes virtuels pour créer
+ deux serveurs virtuels gérés par la même instance d'Apache - le
+ premier serveur répondant en HTTP aux requêtes sur le port 80,
+ le second répondant en HTTPS aux requêtes sur le port
443.</p>
</section>
<section id="ports"><title>Quel port HTTPS utilise-t-il ?</title>
-<p>Vous pouvez associer le protocole HTTPS à n'importe quel port, mais le port
+<p>Vous pouvez associer le protocole HTTPS à n'importe quel port, mais le port
standard est le port 443, que tout navigateur compatible HTTPS va utiliser par
-défaut. Vous pouvez forcer votre navigateur à utiliser un port différent en le
-précisant dans l'URL. Par exemple, si votre serveur est configuré pour
-servir des pages en HTTPS sur le port 8080, vous pourrez y accéder par
+défaut. Vous pouvez forcer votre navigateur à utiliser un port différent en le
+précisant dans l'URL. Par exemple, si votre serveur est configuré pour
+servir des pages en HTTPS sur le port 8080, vous pourrez y accéder par
l'adresse <code>https://example.com:8080/</code>.</p>
</section>
-<section id="httpstest"><title>Comment s'exprimer en langage HTTPS à des fins
+<section id="httpstest"><title>Comment s'exprimer en langage HTTPS à des fins
de test ?</title>
<p>Alors que vous utilisez simplement</p>
GET / HTTP/1.0</example>
<p>pour tester facilement Apache via HTTP, les choses ne sont pas si
- simples pour HTTPS à cause du protocole SSL situé entre TCP et HTTP.
+ simples pour HTTPS à cause du protocole SSL situé entre TCP et HTTP.
La commande OpenSSL <code>s_client</code> vous permet cependant
d'effectuer un test similaire via HTTPS :</p>
<example>$ openssl s_client -connect localhost:443 -state -debug<br />
GET / HTTP/1.0</example>
- <p>Avant la véritable réponse HTTP, vous recevrez des informations
- détaillées à propos de l'établissement de la connexion SSL. Si vous
- recherchez un client en ligne de commande à usage plus général qui comprend
- directement HTTP et HTTPS, qui peut effectuer des opérations GET et POST,
- peut utiliser un mandataire, supporte les requêtes portant sur une partie
+ <p>Avant la véritable réponse HTTP, vous recevrez des informations
+ détaillées à propos de l'établissement de la connexion SSL. Si vous
+ recherchez un client en ligne de commande à usage plus général qui comprend
+ directement HTTP et HTTPS, qui peut effectuer des opérations GET et POST,
+ peut utiliser un mandataire, supporte les requêtes portant sur une partie
d'un fichier (byte-range), etc..., vous devriez vous tourner vers
- l'excellent outil <a href="http://curl.haxx.se/">cURL</a>. Grâce à lui,
- vous pouvez vérifier si Apache répond correctement aux requêtes via
+ l'excellent outil <a href="http://curl.haxx.se/">cURL</a>. Grâce à lui,
+ vous pouvez vérifier si Apache répond correctement aux requêtes via
HTTP et HTTPS comme suit :</p>
<example>$ curl http://localhost/<br />
</section>
<section id="hang"><title>Pourquoi la communication se bloque-t-elle lorsque je
-me connecte à mon serveur Apache configuré pour SSL ?</title>
-<p>Ceci peut arriver si vous vous connectez à un serveur HTTPS (ou à
+me connecte à mon serveur Apache configuré pour SSL ?</title>
+<p>Ceci peut arriver si vous vous connectez à un serveur HTTPS (ou à
un serveur virtuel) via HTTP (par exemple, en utilisant
<code>http://example.com/</code> au lieu de <code>https://example.com</code>).
-Cela peut aussi arriver en essayant de vous connecter via HTTPS à un
+Cela peut aussi arriver en essayant de vous connecter via HTTPS à un
serveur HTTP (par exemple, en utilisant <code>https://example.com/</code>
avec un serveur qui ne supporte pas HTTPS, ou le supporte, mais sur un
-port non standard). Assurez-vous que vous vous connectez bien à un
+port non standard). Assurez-vous que vous vous connectez bien à un
serveur (virtuel) qui supporte SSL.</p>
</section>
-<section id="refused"><title>Pourquoi, lorsque je tente d'accéder en HTTPS à mon
-serveur Apache+mod_ssl fraîchement installé, l'erreur ``Connection Refused''
+<section id="refused"><title>Pourquoi, lorsque je tente d'accéder en HTTPS à mon
+serveur Apache+mod_ssl fraîchement installé, l'erreur ``Connection Refused''
s'affiche-t-elle ?</title>
<p>Une configuration incorrecte peut provoquer ce type d'erreur.
Assurez-vous que vos directives <directive module="mpm_common"
>Listen</directive> s'accordent avec vos directives
<directive type="section" module="core">VirtualHost</directive>. Si
- l'erreur persiste, recommencez depuis le début en restaurant la
- configuration par défaut fournie par<module>mod_ssl</module>.</p>
+ l'erreur persiste, recommencez depuis le début en restaurant la
+ configuration par défaut fournie par<module>mod_ssl</module>.</p>
</section>
<section id="envvars"><title>Pourquoi les variables <code>SSL_XXX</code>
ne sont-elles pas disponibles dans mes scripts CGI et SSI ?</title>
<p>Assurez-vous que la directive ``<code>SSLOptions +StdEnvVars</code>'' est
-bien présente dans le contexte de vos requêtes CGI/SSI.</p>
+bien présente dans le contexte de vos requêtes CGI/SSI.</p>
</section>
<section id="relative">
<title>Comment puis-je basculer entre les protocoles HTTP et
HTTPS dans les hyperliens relatifs ?</title>
<p>Normalement, pour basculer entre HTTP et HTTPS, vous devez utiliser des
-hyperliens pleinement qualifiés (car vous devez modifier le schéma de l'URL).
-Cependant, à l'aide du module <module>mod_rewrite</module>, vous pouvez
-manipuler des hyperliens relatifs, pour obtenir le même effet.</p>
+hyperliens pleinement qualifiés (car vous devez modifier le schéma de l'URL).
+Cependant, à l'aide du module <module>mod_rewrite</module>, vous pouvez
+manipuler des hyperliens relatifs, pour obtenir le même effet.</p>
<highlight language="config">
RewriteEngine on
RewriteRule "^/(.*)_SSL$" "https://%{SERVER_NAME}/$1" [R,L]
RewriteRule "^/(.*)_NOSSL$" "http://%{SERVER_NAME}/$1" [R,L]
</highlight>
- <p>Ce jeu de règles rewrite vous permet d'utiliser des hyperliens de la
+ <p>Ce jeu de règles rewrite vous permet d'utiliser des hyperliens de la
forme <code><a href="document.html_SSL"></code> pour passer en HTTPS
dans les liens relatifs. (Remplacez SSL par NOSSL pour passer en HTTP.)</p>
</section>
<section id="aboutcerts"><title>Certificats</title>
<ul>
-<li><a href="#keyscerts">Qu'est-ce qu'un clé privée RSA, un certificat,
+<li><a href="#keyscerts">Qu'est-ce qu'un clé privée RSA, un certificat,
une demande de signature de certificat (CSR) ?</a></li>
-<li><a href="#startup">Y a-t-il une différence au démarrage entre un serveur
+<li><a href="#startup">Y a-t-il une différence au démarrage entre un serveur
Apache non SSL et un serveur Apache supportant SSL ?</a></li>
-<li><a href="#selfcert">Comment créer un certificat auto-signé SSL à des
+<li><a href="#selfcert">Comment créer un certificat auto-signé SSL à des
fins de test ?</a></li>
-<li><a href="#realcert">Comment créer un vrai certificat SSL ?</a></li>
-<li><a href="#ownca">Comment créer et utiliser sa propre Autorité de
+<li><a href="#realcert">Comment créer un vrai certificat SSL ?</a></li>
+<li><a href="#ownca">Comment créer et utiliser sa propre Autorité de
certification (CA) ?</a></li>
<li><a href="#passphrase">Comment modifier le mot de passe
-de ma clé privée ?</a></li>
-<li><a href="#removepassphrase">Comment démarrer Apache sans avoir à entrer de
+de ma clé privée ?</a></li>
+<li><a href="#removepassphrase">Comment démarrer Apache sans avoir à entrer de
mot de passe ?</a></li>
-<li><a href="#verify">Comment vérifier si une clé privée correspond bien
-à son certificat ?</a></li>
+<li><a href="#verify">Comment vérifier si une clé privée correspond bien
+à son certificat ?</a></li>
<li><a href="#pemder">Comment convertir un certificat du format PEM
au format DER ?</a></li>
<li><a href="#gid">Pourquoi les navigateurs se plaignent-ils de ne pas pouvoir
-vérifier mon certificat de serveur ?</a></li>
+vérifier mon certificat de serveur ?</a></li>
</ul>
-<section id="keyscerts"><title>Qu'est-ce qu'un clé privée RSA, un certificat,
+<section id="keyscerts"><title>Qu'est-ce qu'un clé privée RSA, un certificat,
une demande de signature de certificat (CSR) ?</title>
-<p>Un fichier de clé privée RSA est un fichier numérique que vous pouvez
-utiliser pour déchiffrer des messages que l'on vous a envoyés. Il a son
-pendant à caractère public que vous pouvez distribuer (par le biais de votre
+<p>Un fichier de clé privée RSA est un fichier numérique que vous pouvez
+utiliser pour déchiffrer des messages que l'on vous a envoyés. Il a son
+pendant à caractère public que vous pouvez distribuer (par le biais de votre
certificat), ce qui permet aux utilisateurs de chiffrer les messages qu'ils
vous envoient.</p>
- <p>Une Demande de Signature de Certificat (CSR) est un fichier numérique
- qui contient votre clé publique et votre nom. La CSR doit être envoyée à
- une Autorité de Certification (CA), qui va la convertir en vrai certificat
+ <p>Une Demande de Signature de Certificat (CSR) est un fichier numérique
+ qui contient votre clé publique et votre nom. La CSR doit être envoyée à
+ une Autorité de Certification (CA), qui va la convertir en vrai certificat
en la signant.</p>
- <p>Un certificat contient votre clé publique RSA, votre nom, le nom
- de la CA, et est signé numériquement par cette dernière. Les navigateurs
- qui reconnaissent la CA peuvent vérifier la signature du certificat, et
- ainsi en extraire votre clé publique RSA. Ceci leur permet de vous envoyer
- des messages chiffrés que vous seul pourrez déchiffrer.</p>
- <p>Se référer au chapitre <a href="ssl_intro.html">Introduction</a>
- pour une description générale du protocole SSL.</p>
+ <p>Un certificat contient votre clé publique RSA, votre nom, le nom
+ de la CA, et est signé numériquement par cette dernière. Les navigateurs
+ qui reconnaissent la CA peuvent vérifier la signature du certificat, et
+ ainsi en extraire votre clé publique RSA. Ceci leur permet de vous envoyer
+ des messages chiffrés que vous seul pourrez déchiffrer.</p>
+ <p>Se référer au chapitre <a href="ssl_intro.html">Introduction</a>
+ pour une description générale du protocole SSL.</p>
</section>
-<section id="startup"><title>Y a-t-il une différence au démarrage entre un serveur
+<section id="startup"><title>Y a-t-il une différence au démarrage entre un serveur
Apache non SSL et un serveur Apache supportant SSL ?</title>
-<p>Oui. En général, avec ou sans <module>mod_ssl</module> intégré, le démarrage
-d'Apache ne présente pas de différences. Cependant, si votre fichier de clé
-privée SSL possède un mot de passe, vous devrez le taper au démarrage
+<p>Oui. En général, avec ou sans <module>mod_ssl</module> intégré, le démarrage
+d'Apache ne présente pas de différences. Cependant, si votre fichier de clé
+privée SSL possède un mot de passe, vous devrez le taper au démarrage
d'Apache.</p>
- <p>Devoir entrer manuellement le mot de passe au démarrage du serveur peut
- poser quelques problèmes - par exemple, quand le serveur est démarré au
- moyen de scripts au lancement du système. Dans ce cas, vous pouvez suivre
- les étapes <a href="#removepassphrase">ci-dessous</a> pour supprimer le
- mot de passe de votre clé privée. Gardez à l'esprit qu'agir ainsi augmente
- les risques de sécurité - agissez avec précaution !</p>
+ <p>Devoir entrer manuellement le mot de passe au démarrage du serveur peut
+ poser quelques problèmes - par exemple, quand le serveur est démarré au
+ moyen de scripts au lancement du système. Dans ce cas, vous pouvez suivre
+ les étapes <a href="#removepassphrase">ci-dessous</a> pour supprimer le
+ mot de passe de votre clé privée. Gardez à l'esprit qu'agir ainsi augmente
+ les risques de sécurité - agissez avec précaution !</p>
</section>
-<section id="selfcert"><title>Comment créer un certificat auto-signé SSL à des
+<section id="selfcert"><title>Comment créer un certificat auto-signé SSL à des
fins de test ?</title>
<ol>
- <li>Vérifiez qu'OpenSSL est installé et l'exécutable openssl dans votre
+ <li>Vérifiez qu'OpenSSL est installé et l'exécutable openssl dans votre
<code>PATH</code>.<br />
<br />
</li>
- <li>Exécuter la commande suivante pour créer les fichiers
+ <li>Exécuter la commande suivante pour créer les fichiers
<code>server.key</code> et <code>server.crt</code> :<br />
<code><strong>$ openssl req -new -x509 -nodes -out server.crt
-keyout server.key</strong></code><br />
- Ces fichiers seront utilisés comme suit dans votre
+ Ces fichiers seront utilisés comme suit dans votre
<code>httpd.conf</code> :
<highlight language="config">
SSLCertificateFile /path/to/this/server.crt
</highlight>
</li>
<li>Il est important de savoir que le fichier <code>server.key</code> n'a
- <em>pas</em> de mot de passe. Pour ajouter un mot de passe à la clé, vous
- devez exécuter la commande suivante et confirmer le mot de passe comme
- demandé.<br />
+ <em>pas</em> de mot de passe. Pour ajouter un mot de passe à la clé, vous
+ devez exécuter la commande suivante et confirmer le mot de passe comme
+ demandé.<br />
<p><code><strong>$ openssl rsa -des3 -in server.key -out
server.key.new</strong></code><br />
<code><strong>$ mv server.key.new server.key</strong></code><br /></p>
Sauvegardez le fichier <code>server.key</code> ainsi que son mot de
- passe en lieu sûr.
+ passe en lieu sûr.
</li>
</ol>
</section>
-<section id="realcert"><title>Comment créer un vrai certificat SSL ?</title>
-<p>Voici la marche à suivre pas à pas :</p>
+<section id="realcert"><title>Comment créer un vrai certificat SSL ?</title>
+<p>Voici la marche à suivre pas à pas :</p>
<ol>
- <li>Assurez-vous qu'OpenSSL est bien installé et dans votre <code>PATH</code>.
+ <li>Assurez-vous qu'OpenSSL est bien installé et dans votre <code>PATH</code>.
<br />
<br />
</li>
- <li>Créez une clé privée RSA pour votre serveur Apache
- (elle sera au format PEM et chiffrée en Triple-DES):<br />
+ <li>Créez une clé privée RSA pour votre serveur Apache
+ (elle sera au format PEM et chiffrée en Triple-DES):<br />
<br />
<code><strong>$ openssl genrsa -des3 -out server.key 2048</strong></code><br />
<br />
Enregistrez le fichier <code>server.key</code> et le mot de passe
- éventuellement défini en lieu sûr.
- Vous pouvez afficher les détails de cette clé privée RSA à l'aide de la
+ éventuellement défini en lieu sûr.
+ Vous pouvez afficher les détails de cette clé privée RSA à l'aide de la
commande :<br />
<br />
<code><strong>$ openssl rsa -noout -text -in server.key</strong></code><br />
<br />
- Si nécessaire, vous pouvez aussi créer une version PEM non chiffrée
- (non recommandé) de clé privée RSA avec :<br />
+ Si nécessaire, vous pouvez aussi créer une version PEM non chiffrée
+ (non recommandé) de clé privée RSA avec :<br />
<br />
<code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code><br />
<br />
</li>
- <li>Créez une Demande de signature de Certificat (CSR) à l'aide de la
- clé privée précédemment générée (la sortie sera au format PEM):<br />
+ <li>Créez une Demande de signature de Certificat (CSR) à l'aide de la
+ clé privée précédemment générée (la sortie sera au format PEM):<br />
<br />
<code><strong>$ openssl req -new -key server.key -out server.csr</strong></code><br />
<br />
- Vous devez entrer le Nom de Domaine Pleinement Qualifié
+ Vous devez entrer le Nom de Domaine Pleinement Qualifié
("Fully Qualified Domain Name" ou FQDN) de votre serveur lorsqu'OpenSSL
- vous demande le "CommonName", c'est à dire que si vous générez une CSR
- pour un site web auquel on accèdera par l'URL
+ vous demande le "CommonName", c'est à dire que si vous générez une CSR
+ pour un site web auquel on accèdera par l'URL
<code>https://www.foo.dom/</code>, le FQDN sera "www.foo.dom". Vous
- pouvez afficher les détails de ce CSR avec :<br />
+ pouvez afficher les détails de ce CSR avec :<br />
<br />
<code><strong>$ openssl req -noout -text -in server.csr</strong></code><br />
<br />
</li>
- <li>Vous devez maintenant envoyer la CSR à une Autorité de Certification
- (CA), afin que cette dernière puisse la signer. Une fois la CSR signée,
- vous disposerez d'un véritable certificat que vous pourrez utiliser avec
+ <li>Vous devez maintenant envoyer la CSR à une Autorité de Certification
+ (CA), afin que cette dernière puisse la signer. Une fois la CSR signée,
+ vous disposerez d'un véritable certificat que vous pourrez utiliser avec
Apache. Vous pouvez faire signer votre CSR par une CA commerciale ou par
votre propre CA.<br />
- Les CAs commerciales vous demandent en général de leur envoyer la CSR
- par l'intermédiaire d'un formulaire web, de régler le montant de la
- signature, puis vous envoient un certificat signé que vous pouvez
+ Les CAs commerciales vous demandent en général de leur envoyer la CSR
+ par l'intermédiaire d'un formulaire web, de régler le montant de la
+ signature, puis vous envoient un certificat signé que vous pouvez
enregistrer dans un fichier server.crt.
- Pour plus de détails sur la manière de créer sa propre CA, et de
+ Pour plus de détails sur la manière de créer sa propre CA, et de
l'utiliser pour signer une CSR, voir <a href="#ownca">ci-dessous</a>.<br />
- Une fois la CSR signée, vous pouvez afficher les détails du certificat
+ Une fois la CSR signée, vous pouvez afficher les détails du certificat
comme suit :<br />
<br />
<code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
</li>
<li>Vous devez maintenant disposer de deux fichiers :
- <code>server.key</code> et <code>server.crt</code>. Ils sont précisés dans
+ <code>server.key</code> et <code>server.crt</code>. Ils sont précisés dans
votre fichier <code>httpd.conf</code> comme suit :
<highlight language="config">
SSLCertificateFile /path/to/this/server.crt
SSLCertificateKeyFile /path/to/this/server.key
</highlight>
- Le fichier <code>server.csr</code> n'est plus nécessaire.
+ Le fichier <code>server.csr</code> n'est plus nécessaire.
</li>
</ol>
</section>
-<section id="ownca"><title>Comment créer et utiliser sa propre Autorité de
+<section id="ownca"><title>Comment créer et utiliser sa propre Autorité de
certification (CA) ?</title>
- <p>La solution la plus simple consiste à utiliser les scripts
+ <p>La solution la plus simple consiste à utiliser les scripts
<code>CA.sh</code> ou <code>CA.pl</code> fournis avec OpenSSL. De
- préférence, utilisez cette solution, à moins que vous ayez de bonnes
- raisons de ne pas le faire. Dans ce dernier cas, vous pouvez créer un
- certificat auto-signé comme suit :</p>
+ préférence, utilisez cette solution, à moins que vous ayez de bonnes
+ raisons de ne pas le faire. Dans ce dernier cas, vous pouvez créer un
+ certificat auto-signé comme suit :</p>
<ol>
- <li>Créez une clé privée RSA pour votre serveur
- (elle sera au format PEM et chiffrée en Triple-DES) :<br />
+ <li>Créez une clé privée RSA pour votre serveur
+ (elle sera au format PEM et chiffrée en Triple-DES) :<br />
<br />
<code><strong>$ openssl genrsa -des3 -out server.key 2048</strong></code><br />
<br />
Sauvegardez le fichier <code>server.key</code> et le mot de passe
- éventuellement défini en lieu sûr.
- Vous pouvez afficher les détails de cette clé privée RSA à l'aide de la
+ éventuellement défini en lieu sûr.
+ Vous pouvez afficher les détails de cette clé privée RSA à l'aide de la
commande :<br />
<br />
<code><strong>$ openssl rsa -noout -text -in server.key</strong></code><br />
<br />
- Si nécessaire, vous pouvez aussi créer une version PEM non chiffrée
- (non recommandé) de cette clé privée RSA avec :<br />
+ Si nécessaire, vous pouvez aussi créer une version PEM non chiffrée
+ (non recommandé) de cette clé privée RSA avec :<br />
<br />
<code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code><br />
<br />
</li>
- <li>Créez un certificat auto-signé (structure X509) à l'aide de la clé RSA
- que vous venez de générer (la sortie sera au format PEM) :<br />
+ <li>Créez un certificat auto-signé (structure X509) à l'aide de la clé RSA
+ que vous venez de générer (la sortie sera au format PEM) :<br />
<br />
<code><strong>$ openssl req -new -x509 -nodes -sha1 -days 365
-key server.key -out server.crt -extensions usr_cert</strong></code><br />
<br />
Cette commande signe le certificat du serveur et produit un fichier
- <code>server.crt</code>. Vous pouvez afficher les détails de ce
+ <code>server.crt</code>. Vous pouvez afficher les détails de ce
certificat avec :<br />
<br />
<code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
</section>
<section id="passphrase"><title>Comment modifier le mot de passe
-de ma clé privée ?</title>
-<p>Vous devez simplement lire la clé avec l'ancien mot de passe et la
-réécrire en spécifiant le nouveau mot de passe. Pour cela, vous pouvez
+de ma clé privée ?</title>
+<p>Vous devez simplement lire la clé avec l'ancien mot de passe et la
+réécrire en spécifiant le nouveau mot de passe. Pour cela, vous pouvez
utiliser les commandes suivantes :</p>
<p><code><strong>$ openssl rsa -des3 -in server.key -out server.key.new</strong></code><br />
<code><strong>$ mv server.key.new server.key</strong></code><br /></p>
- <p>La première fois qu'il vous est demandé un mot de passe PEM, vous
+ <p>La première fois qu'il vous est demandé un mot de passe PEM, vous
devez entrer l'ancien mot de passe. Ensuite, on vous demandera d'entrer
encore un mot de passe - cette fois, entrez le nouveau mot de passe. Si on
- vous demande de vérifier le mot de passe, vous devrez entrer le nouveau
+ vous demande de vérifier le mot de passe, vous devrez entrer le nouveau
mot de passe une seconde fois.</p>
</section>
-<section id="removepassphrase"><title>Comment démarrer Apache sans avoir à entrer de
+<section id="removepassphrase"><title>Comment démarrer Apache sans avoir à entrer de
mot de passe ?</title>
-<p>L'apparition de ce dialogue au démarrage et à chaque redémarrage provient
-du fait que la clé privée RSA contenue dans votre fichier server.key est
-enregistrée sous forme chiffrée pour des raisons de sécurité. Le
-déchiffrement de ce fichier nécessite un mot de passe, afin de pouvoir être
-lu et interprété. Cependant, La suppression du mot de passe diminue le niveau de
-sécurité du serveur - agissez avec précautions !</p>
+<p>L'apparition de ce dialogue au démarrage et à chaque redémarrage provient
+du fait que la clé privée RSA contenue dans votre fichier server.key est
+enregistrée sous forme chiffrée pour des raisons de sécurité. Le
+déchiffrement de ce fichier nécessite un mot de passe, afin de pouvoir être
+lu et interprété. Cependant, La suppression du mot de passe diminue le niveau de
+sécurité du serveur - agissez avec précautions !</p>
<ol>
- <li>Supprimer le chiffrement de la clé privée RSA (tout en conservant une
+ <li>Supprimer le chiffrement de la clé privée RSA (tout en conservant une
copie de sauvegarde du fichier original) :<br />
<br />
<code><strong>$ cp server.key server.key.org</strong></code><br />
</li>
</ol>
- <p>Maintenant, <code>server.key</code> contient une copie non chiffrée de
- la clé. Si vous utilisez ce fichier pour votre serveur, il ne vous
- demandera plus de mot de passe. CEPENDANT, si quelqu'un arrive à obtenir
- cette clé, il sera en mesure d'usurper votre identité sur le réseau.
- Vous DEVEZ par conséquent vous assurer que seuls root ou le serveur web
- peuvent lire ce fichier (de préférence, démarrez le serveur web sous
- root et faites le s'exécuter sous un autre utilisateur, en n'autorisant
- la lecture de la clé que par root).</p>
+ <p>Maintenant, <code>server.key</code> contient une copie non chiffrée de
+ la clé. Si vous utilisez ce fichier pour votre serveur, il ne vous
+ demandera plus de mot de passe. CEPENDANT, si quelqu'un arrive à obtenir
+ cette clé, il sera en mesure d'usurper votre identité sur le réseau.
+ Vous DEVEZ par conséquent vous assurer que seuls root ou le serveur web
+ peuvent lire ce fichier (de préférence, démarrez le serveur web sous
+ root et faites le s'exécuter sous un autre utilisateur, en n'autorisant
+ la lecture de la clé que par root).</p>
- <p>Une autre alternative consiste à utiliser la directive
+ <p>Une autre alternative consiste à utiliser la directive
``<code>SSLPassPhraseDialog exec:/chemin/vers/programme</code>''. Gardez
- cependant à l'esprit que ce n'est bien entendu ni plus ni moins
- sécurisé.</p>
-</section>
-
-<section id="verify"><title>Comment vérifier si une clé privée correspond bien
-à son certificat ?</title>
-<p>Une clé privée contient une série de nombres. Deux de ces nombres forment la
-"clé publique", les autres appartiennent à la "clé privée". Les bits de la
-"clé publique" sont inclus quand vous générez une CSR, et font par
-conséquent partie du certificat associé.</p>
- <p>Pour vérifier que la clé publique contenue dans votre certificat
- correspond bien à la partie publique de votre clé privée, il vous suffit
- de comparer ces nombres. Pour afficher le certificat et la clé,
+ cependant à l'esprit que ce n'est bien entendu ni plus ni moins
+ sécurisé.</p>
+</section>
+
+<section id="verify"><title>Comment vérifier si une clé privée correspond bien
+à son certificat ?</title>
+<p>Une clé privée contient une série de nombres. Deux de ces nombres forment la
+"clé publique", les autres appartiennent à la "clé privée". Les bits de la
+"clé publique" sont inclus quand vous générez une CSR, et font par
+conséquent partie du certificat associé.</p>
+ <p>Pour vérifier que la clé publique contenue dans votre certificat
+ correspond bien à la partie publique de votre clé privée, il vous suffit
+ de comparer ces nombres. Pour afficher le certificat et la clé,
utilisez cette commande :</p>
<p><code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
<code><strong>$ openssl rsa -noout -text -in server.key</strong></code></p>
- <p>Les parties `modulus' et `public exponent' doivent être identiques dans
- la clé et le certificat. Comme le `public exponent' est habituellement
- 65537, et comme il est difficile de vérifier visuellement que les nombreux
+ <p>Les parties `modulus' et `public exponent' doivent être identiques dans
+ la clé et le certificat. Comme le `public exponent' est habituellement
+ 65537, et comme il est difficile de vérifier visuellement que les nombreux
nombres du `modulus' sont identiques, vous pouvez utiliser l'approche
suivante :</p>
<p><code><strong>$ openssl x509 -noout -modulus -in server.crt | openssl md5</strong></code><br />
<code><strong>$ openssl rsa -noout -modulus -in server.key | openssl md5</strong></code></p>
- <p>Il ne vous reste ainsi que deux nombres relativement courts à comparer.
- Il est possible, en théorie que ces deux nombres soient les mêmes, sans que
+ <p>Il ne vous reste ainsi que deux nombres relativement courts à comparer.
+ Il est possible, en théorie que ces deux nombres soient les mêmes, sans que
les nombres du modulus soient identiques, mais les chances en sont infimes.</p>
- <p>Si vous souhaitez vérifier à quelle clé ou certificat appartient une CSR
- particulière, vous pouvez effectuer le même calcul
+ <p>Si vous souhaitez vérifier à quelle clé ou certificat appartient une CSR
+ particulière, vous pouvez effectuer le même calcul
sur la CSR comme suit :</p>
<p><code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code></p>
<section id="pemder"><title>Comment convertir un certificat du format PEM
au format DER ?</title>
-<p>Le format des certificats par défaut pour OpenSSL est le format PEM,
-qui est tout simplement un format DER codé en Base64, avec des lignes
-d'en-têtes et des annotations. Certaines applications, comme
+<p>Le format des certificats par défaut pour OpenSSL est le format PEM,
+qui est tout simplement un format DER codé en Base64, avec des lignes
+d'en-têtes et des annotations. Certaines applications, comme
Microsoft Internet Explorer, ont besoin d'un certificat au format DER de base.
-Vous pouvez convertir un fichier PEM <code>cert.pem</code> en son équivalent
-au format DER <code>cert.der</code> à l'aide de la commande suivante :
+Vous pouvez convertir un fichier PEM <code>cert.pem</code> en son équivalent
+au format DER <code>cert.der</code> à l'aide de la commande suivante :
<code><strong>$ openssl x509 -in cert.pem -out cert.der
-outform DER</strong></code></p>
</section>
<section id="gid"><title>Pourquoi les navigateurs se plaignent-ils de ne pas pouvoir
-vérifier mon certificat de serveur ?</title>
-
- <p>Ceci peut se produire si votre certificat de serveur est signé
- par une autorité de certification intermédiaire. Plusieurs CAs,
- comme Verisign ou Thawte, ont commencé à signer les certificats avec
- des certificats intermédiaires au lieu de leur certificat racine.</p>
-
- <p>Les certificats de CA intermédiaires se situe à un niveau
- intermédiaire entre le certificat racine de la CA (qui est installé dans les
- navigateurs) et le certificat du serveur (que vous avez installé sur
- votre serveur). Pour que le navigateur puisse traverser et vérifier
- la chaîne de confiance depuis le certificat du serveur jusqu'au
+vérifier mon certificat de serveur ?</title>
+
+ <p>Ceci peut se produire si votre certificat de serveur est signé
+ par une autorité de certification intermédiaire. Plusieurs CAs,
+ comme Verisign ou Thawte, ont commencé à signer les certificats avec
+ des certificats intermédiaires au lieu de leur certificat racine.</p>
+
+ <p>Les certificats de CA intermédiaires se situe à un niveau
+ intermédiaire entre le certificat racine de la CA (qui est installé dans les
+ navigateurs) et le certificat du serveur (que vous avez installé sur
+ votre serveur). Pour que le navigateur puisse traverser et vérifier
+ la chaîne de confiance depuis le certificat du serveur jusqu'au
certificat racine, il faut lui fournir les certificats
- intermédiaires. Les CAs devraient pouvoir fournir de tels
- paquetages de certificats intermédiaires à installer sur les
+ intermédiaires. Les CAs devraient pouvoir fournir de tels
+ paquetages de certificats intermédiaires à installer sur les
serveurs.</p>
- <p>Vous devez inclure ces certificats intermédiaires via la
+ <p>Vous devez inclure ces certificats intermédiaires via la
directive <directive
module="mod_ssl">SSLCertificateChainFile</directive>.</p>
</section>
<section id="aboutssl"><title>Le protocole SSL</title>
<ul>
-<li><a href="#random">Pourquoi de nombreuses et aléatoires erreurs de
+<li><a href="#random">Pourquoi de nombreuses et aléatoires erreurs de
protocole SSL apparaissent-elles en cas de forte charge du serveur ?</a></li>
<li><a href="#load">Pourquoi la charge de mon serveur est-elle plus
-importante depuis qu'il sert des ressources chiffrées en SSL ?</a></li>
-<li><a href="#establishing">Pourquoi les connexions en HTTPS à mon serveur
-prennent-elles parfois jusqu'à 30 secondes pour s'établir ?</a></li>
+importante depuis qu'il sert des ressources chiffrées en SSL ?</a></li>
+<li><a href="#establishing">Pourquoi les connexions en HTTPS à mon serveur
+prennent-elles parfois jusqu'à 30 secondes pour s'établir ?</a></li>
<li><a href="#ciphers">Quels sont les algorithmes de chiffrement
-supportés par mod_ssl ?</a></li>
-<li><a href="#adh">Pourquoi une erreur ``no shared cipher'' apparaît-elle
+supportés par mod_ssl ?</a></li>
+<li><a href="#adh">Pourquoi une erreur ``no shared cipher'' apparaît-elle
quand j'essaie d'utiliser un algorithme de chiffrement
Diffie-Hellman anonyme (ADH) ?</a></li>
<li><a href="#sharedciphers">Pourquoi une erreur ``no shared cipher''
-apparaît-elle lorsqu'on se connecte à mon serveur
-fraîchement installé ?</a></li>
-<li><a href="#vhosts">Pourquoi ne peut-on pas utiliser SSL avec des hôtes
-virtuels identifiés par un nom et non par une adresse IP ?</a></li>
+apparaît-elle lorsqu'on se connecte à mon serveur
+fraîchement installé ?</a></li>
+<li><a href="#vhosts">Pourquoi ne peut-on pas utiliser SSL avec des hôtes
+virtuels identifiés par un nom et non par une adresse IP ?</a></li>
<li><a href="#vhosts2">Est-il possible d'utiliser
-l'hébergement virtuel basé sur le nom d'hôte
-pour différencier plusieurs hôtes virtuels ?</a></li>
+l'hébergement virtuel basé sur le nom d'hôte
+pour différencier plusieurs hôtes virtuels ?</a></li>
<li><a href="#comp">Comment mettre en oeuvre la compression SSL ?</a></li>
<li><a href="#lockicon">Lorsque j'utilise l'authentification de base sur HTTPS,
-l'icône de verrouillage des navigateurs Netscape reste ouverte quand la boîte
-de dialogue d'authentification apparaît. Cela signifie-t-il que les utilisateur
-et mot de passe sont envoyés en clair ?</a></li>
-<li><a href="#msie">Pourquoi des erreurs d'entrée/sortie apparaissent-elles
-lorsqu'on se connecte à un serveur Apache+mod_ssl avec
+l'icône de verrouillage des navigateurs Netscape reste ouverte quand la boîte
+de dialogue d'authentification apparaît. Cela signifie-t-il que les utilisateur
+et mot de passe sont envoyés en clair ?</a></li>
+<li><a href="#msie">Pourquoi des erreurs d'entrée/sortie apparaissent-elles
+lorsqu'on se connecte à un serveur Apache+mod_ssl avec
Microsoft Internet Explorer (MSIE) ?</a></li>
<li><a href="#srp">Comment activer TLS-SRP ?</a></li>
-<li><a href="#javadh">Pourquoi des erreurs de négociation apparaissent
-avec les clients basés sur Java lorsqu'on utilise un certificat de plus
+<li><a href="#javadh">Pourquoi des erreurs de négociation apparaissent
+avec les clients basés sur Java lorsqu'on utilise un certificat de plus
de 1024 bits ?</a></li>
</ul>
-<section id="random"><title>Pourquoi de nombreuses et aléatoires erreurs de
+<section id="random"><title>Pourquoi de nombreuses et aléatoires erreurs de
protocole SSL apparaissent-elles en cas de forte charge du serveur ?</title>
-<p>Ce problème peut avoir plusieurs causes, mais la principale réside dans le
-cache de session SSL défini par la directive
+<p>Ce problème peut avoir plusieurs causes, mais la principale réside dans le
+cache de session SSL défini par la directive
<directive module="mod_ssl">SSLSessionCache</directive>. Le cache de session
-DBM est souvent à la source du problème qui peut être résolu en utilisant le
+DBM est souvent à la source du problème qui peut être résolu en utilisant le
cache de session SHM (ou en n'utilisant tout simplement pas de cache).</p>
</section>
<section id="load"><title>Pourquoi la charge de mon serveur est-elle plus
-importante depuis qu'il sert des ressources chiffrées en SSL ?</title>
-<p>SSL utilise un procédé de chiffrement fort qui nécessite la manipulation
-d'une quantité très importante de nombres. Lorsque vous effectuez une requête
-pour une page web via HTTPS, tout (même les images) est chiffré avant d'être
-transmis. C'est pourquoi un accroissement du traffic HTTPS entraîne une
+importante depuis qu'il sert des ressources chiffrées en SSL ?</title>
+<p>SSL utilise un procédé de chiffrement fort qui nécessite la manipulation
+d'une quantité très importante de nombres. Lorsque vous effectuez une requête
+pour une page web via HTTPS, tout (même les images) est chiffré avant d'être
+transmis. C'est pourquoi un accroissement du traffic HTTPS entraîne une
augmentation de la charge.</p>
</section>
-<section id="establishing"><title>Pourquoi les connexions en HTTPS à mon serveur
-prennent-elles parfois jusqu'à 30 secondes pour s'établir ?</title>
-<p>Ce problème provient en général d'un périphérique <code>/dev/random</code>
-qui bloque l'appel système read(2) jusqu'à ce que suffisamment d'entropie
-soit disponible pour servir la requête. Pour plus d'information, se référer au
-manuel de référence de la directive
+<section id="establishing"><title>Pourquoi les connexions en HTTPS à mon serveur
+prennent-elles parfois jusqu'à 30 secondes pour s'établir ?</title>
+<p>Ce problème provient en général d'un périphérique <code>/dev/random</code>
+qui bloque l'appel système read(2) jusqu'à ce que suffisamment d'entropie
+soit disponible pour servir la requête. Pour plus d'information, se référer au
+manuel de référence de la directive
<directive module="mod_ssl">SSLRandomSeed</directive>.</p>
</section>
<section id="ciphers"><title>Quels sont les algorithmes de chiffrement
-supportés par mod_ssl ?</title>
-<p>En général, tous les algorithmes de chiffrement supportés par la version
-d'OpenSSL installée, le sont aussi par <module>mod_ssl</module>. La liste des
-algorithmes disponibles peut dépendre de la manière dont vous avez installé
-OpenSSL. Typiquement, au moins les algorithmes suivants sont supportés :</p>
+supportés par mod_ssl ?</title>
+<p>En général, tous les algorithmes de chiffrement supportés par la version
+d'OpenSSL installée, le sont aussi par <module>mod_ssl</module>. La liste des
+algorithmes disponibles peut dépendre de la manière dont vous avez installé
+OpenSSL. Typiquement, au moins les algorithmes suivants sont supportés :</p>
<ol>
<li>RC4 avec SHA1</li>
<li>Triple-DES avec SHA1</li>
</ol>
- <p>Pour déterminer la liste réelle des algorithmes disponibles, vous
+ <p>Pour déterminer la liste réelle des algorithmes disponibles, vous
pouvez utiliser la commande suivante :</p>
<example>$ openssl ciphers -v</example>
</section>
-<section id="adh"><title>Pourquoi une erreur ``no shared cipher'' apparaît-elle
+<section id="adh"><title>Pourquoi une erreur ``no shared cipher'' apparaît-elle
quand j'essaie d'utiliser un algorithme de chiffrement
Diffie-Hellman anonyme (ADH) ?</title>
-<p>Par défaut et pour des raisons de sécurité, OpenSSl ne permet <em>pas</em>
+<p>Par défaut et pour des raisons de sécurité, OpenSSl ne permet <em>pas</em>
l'utilisation des algorithmes de chiffrements ADH. Veuillez vous informer
sur les effets pervers potentiels si vous choisissez d'activer le support
de ces algorithmes de chiffrements.</p>
<p>Pour pouvoir utiliser les algorithmes de chiffrements Diffie-Hellman
anonymes (ADH), vous devez compiler OpenSSL avec
-``<code>-DSSL_ALLOW_ADH</code>'', puis ajouter ``<code>ADH</code>'' à votre
+``<code>-DSSL_ALLOW_ADH</code>'', puis ajouter ``<code>ADH</code>'' à votre
directive <directive module="mod_ssl">SSLCipherSuite</directive>.</p>
</section>
<section id="sharedciphers"><title>Pourquoi une erreur ``no shared cipher''
-apparaît-elle lorsqu'on se connecte à mon serveur
-fraîchement installé ?</title>
-<p>Soit vous avez fait une erreur en définissant votre directive
+apparaît-elle lorsqu'on se connecte à mon serveur
+fraîchement installé ?</title>
+<p>Soit vous avez fait une erreur en définissant votre directive
<directive module="mod_ssl">SSLCipherSuite</directive> (comparez-la avec
-l'exemple préconfiguré dans <code>extra/httpd-ssl.conf</code>), soit vous avez
+l'exemple préconfiguré dans <code>extra/httpd-ssl.conf</code>), soit vous avez
choisi d'utiliser des algorithmes DSA/DH au lieu de RSA lorsque vous avez
-généré votre clé privée, et avez ignoré ou êtes passé outre les
+généré votre clé privée, et avez ignoré ou êtes passé outre les
avertissements. Si vous avez choisi DSA/DH, votre serveur est incapable de
-communiquer en utilisant des algorithmes de chiffrements SSL basés sur RSA
-(du moins tant que vous n'aurez pas configuré une paire clé/certificat RSA
+communiquer en utilisant des algorithmes de chiffrements SSL basés sur RSA
+(du moins tant que vous n'aurez pas configuré une paire clé/certificat RSA
additionnelle). Les navigateurs modernes tels que NS ou IE ne peuvent
communiquer par SSL qu'avec des algorithmes RSA. C'est ce qui provoque l'erreur
-"no shared ciphers". Pour la corriger, générez une nouvelle paire
-clé/certificat pour le serveur en utilisant un algorithme de chiffrement
+"no shared ciphers". Pour la corriger, générez une nouvelle paire
+clé/certificat pour le serveur en utilisant un algorithme de chiffrement
RSA.</p>
</section>
-<section id="vhosts"><title>Pourquoi ne peut-on pas utiliser SSL avec des hôtes
-virtuels identifiés par un nom et non par une adresse IP ?</title>
-<p>La raison est très technique, et s'apparente au problème de la primauté de
+<section id="vhosts"><title>Pourquoi ne peut-on pas utiliser SSL avec des hôtes
+virtuels identifiés par un nom et non par une adresse IP ?</title>
+<p>La raison est très technique, et s'apparente au problème de la primauté de
l'oeuf ou de la poule. La couche du protocole SSL se trouve en dessous de la
-couche de protocole HTTP qu'elle encapsule. Lors de l'établissement d'une
-connexion SSL (HTTPS), Apache/mod_ssl doit négocier les paramètres du
+couche de protocole HTTP qu'elle encapsule. Lors de l'établissement d'une
+connexion SSL (HTTPS), Apache/mod_ssl doit négocier les paramètres du
protocole SSL avec le client. Pour cela, mod_ssl doit consulter la
-configuration du serveur virtuel (par exemple, il doit accéder à la suite
+configuration du serveur virtuel (par exemple, il doit accéder à la suite
d'algorithmes de chiffrement, au certificat du serveur, etc...). Mais afin de
-sélectionner le bon serveur virtuel, Apache doit connaître le contenu du champ
-d'en-tête HTTP <code>Host</code>. Pour cela, il doit lire l'en-tête de la
-requête HTTP. Mais il ne peut le faire tant que la négociation SSL n'est pas
-terminée, or, la phase de négociation SSL a besoin du nom d'hôte contenu
-dans l'en-tête de la requête. Voir la question suivante pour
-contourner ce problème.</p>
+sélectionner le bon serveur virtuel, Apache doit connaître le contenu du champ
+d'en-tête HTTP <code>Host</code>. Pour cela, il doit lire l'en-tête de la
+requête HTTP. Mais il ne peut le faire tant que la négociation SSL n'est pas
+terminée, or, la phase de négociation SSL a besoin du nom d'hôte contenu
+dans l'en-tête de la requête. Voir la question suivante pour
+contourner ce problème.</p>
<p>Notez que si votre certificat comporte un nom de serveur avec
- caractères génériques, ou des noms de serveurs multiples dans le
+ caractères génériques, ou des noms de serveurs multiples dans le
champ subjectAltName, vous pouvez utiliser SSL avec les serveurs
- virtuels à base de noms sans avoir à contourner ce problème.</p>
+ virtuels à base de noms sans avoir à contourner ce problème.</p>
</section>
<section id="vhosts2"><title>Est-il possible d'utiliser
-l'hébergement virtuel basé sur le nom d'hôte
-pour différencier plusieurs hôtes virtuels ?</title>
- <p>L'hébergement virtuel basé sur le nom est une méthode très populaire
- d'identification des différents hôtes virtuels. Il permet d'utiliser la
- même adresse IP et le même numéro de port pour de nombreux sites
- différents. Lorsqu'on se tourne vers SSL, il semble tout naturel de penser
- que l'on peut appliquer la même méthode pour gérer plusieurs hôtes
- virtuels SSL sur le même serveur.</p>
+l'hébergement virtuel basé sur le nom d'hôte
+pour différencier plusieurs hôtes virtuels ?</title>
+ <p>L'hébergement virtuel basé sur le nom est une méthode très populaire
+ d'identification des différents hôtes virtuels. Il permet d'utiliser la
+ même adresse IP et le même numéro de port pour de nombreux sites
+ différents. Lorsqu'on se tourne vers SSL, il semble tout naturel de penser
+ que l'on peut appliquer la même méthode pour gérer plusieurs hôtes
+ virtuels SSL sur le même serveur.</p>
<p>C'est possible, mais seulement si on utilise une version 2.2.12
- ou supérieure du serveur web compilée avec OpenSSL
- version 0.9.8j ou supérieure. Ceci est du au fait que
- l'utilisation de l'hébergement virtuel à base de nom
- avec SSL nécessite une fonctionnalité appelée
+ ou supérieure du serveur web compilée avec OpenSSL
+ version 0.9.8j ou supérieure. Ceci est du au fait que
+ l'utilisation de l'hébergement virtuel à base de nom
+ avec SSL nécessite une fonctionnalité appelée
Indication du Nom de Serveur (Server Name Indication - SNI) que
- seules les révisions les plus récentes de la
- spécification SSL supportent.</p>
+ seules les révisions les plus récentes de la
+ spécification SSL supportent.</p>
<p>Notez que si votre certificat comporte un nom de serveur avec
- caractères génériques, ou des noms de serveurs multiples dans le
+ caractères génériques, ou des noms de serveurs multiples dans le
champ subjectAltName, vous pouvez utiliser SSL avec les serveurs
- virtuels à base de noms sans avoir à contourner ce problème.</p>
-
- <p>La raison en est que le protocole SSL constitue une couche séparée qui
- encapsule le protocole HTTP. Aini, la session SSL nécessite une
- transaction séparée qui prend place avant que la session HTTP n'ait débuté.
- Le serveur reçoit une requête SSL sur l'adresse IP X et le port Y
- (habituellement 443). Comme la requête SSL ne contenait aucun
- en-tête Host:, le serveur n'avait aucun moyen de déterminer quel hôte virtuel SSL il
- devait utiliser. En général, il utilisait le premier
+ virtuels à base de noms sans avoir à contourner ce problème.</p>
+
+ <p>La raison en est que le protocole SSL constitue une couche séparée qui
+ encapsule le protocole HTTP. Aini, la session SSL nécessite une
+ transaction séparée qui prend place avant que la session HTTP n'ait débuté.
+ Le serveur reçoit une requête SSL sur l'adresse IP X et le port Y
+ (habituellement 443). Comme la requête SSL ne contenait aucun
+ en-tête Host:, le serveur n'avait aucun moyen de déterminer quel hôte virtuel SSL il
+ devait utiliser. En général, il utilisait le premier
qu'il trouvait et qui
- correspondait à l'adresse IP et au port spécifiés.</p>
+ correspondait à l'adresse IP et au port spécifiés.</p>
<p>Par contre, si vous utilisez des versions du serveur web et
d'OpenSSL qui supportent SNI, et si le navigateur du client le
- supporte aussi, alors le nom d'hôte sera inclus dans la
- requête SSL originale, et le serveur web pourra
- sélectionner le bon serveur virtuel SSL.</p>
+ supporte aussi, alors le nom d'hôte sera inclus dans la
+ requête SSL originale, et le serveur web pourra
+ sélectionner le bon serveur virtuel SSL.</p>
- <p>Bien entendu, vous pouvez utiliser l'hébergement virtuel basé sur le nom
- pour identifier de nombreux hôtes virtuels non-SSL
- (tous sur le port 80 par exemple), et ne gérer qu'un seul hôte virtuel SSL
- (sur le port 443). Mais dans ce cas, vous devez définir le numéro de port
- non-SSL à l'aide de la directive NameVirtualHost dans ce style :</p>
+ <p>Bien entendu, vous pouvez utiliser l'hébergement virtuel basé sur le nom
+ pour identifier de nombreux hôtes virtuels non-SSL
+ (tous sur le port 80 par exemple), et ne gérer qu'un seul hôte virtuel SSL
+ (sur le port 443). Mais dans ce cas, vous devez définir le numéro de port
+ non-SSL à l'aide de la directive NameVirtualHost dans ce style :</p>
<highlight language="config">
NameVirtualHost 192.168.1.1:80
<p>il existe d'autres solutions alternatives comme :</p>
- <p>Utiliser des adresses IP différentes pour chaque hôte SSL.
- Utiliser des numéros de port différents pour chaque hôte SSL.</p>
+ <p>Utiliser des adresses IP différentes pour chaque hôte SSL.
+ Utiliser des numéros de port différents pour chaque hôte SSL.</p>
</section>
<section id="comp"><title>Comment mettre en oeuvre la compression SSL ?</title>
-<p>Bien que la négociation pour la compression SSL ait été définie dans la
-spécification de SSLv2 et TLS, ce n'est qu'en mai 2004 que la RFC 3749 a
-défini DEFLATE comme une méthode de compression standard négociable.
+<p>Bien que la négociation pour la compression SSL ait été définie dans la
+spécification de SSLv2 et TLS, ce n'est qu'en mai 2004 que la RFC 3749 a
+défini DEFLATE comme une méthode de compression standard négociable.
</p>
-<p>Depuis la version 0.9.8, OpenSSL supporte cette compression par défaut
-lorsqu'il est compilé avec l'option <code>zlib</code>. Si le client et le
-serveur supportent la compression, elle sera utilisée. Cependant, la
+<p>Depuis la version 0.9.8, OpenSSL supporte cette compression par défaut
+lorsqu'il est compilé avec l'option <code>zlib</code>. Si le client et le
+serveur supportent la compression, elle sera utilisée. Cependant, la
plupart des clients essaient encore de se connecter avec un Hello SSLv2.
-Comme SSLv2 ne comportait pas de table des algorithmes de compression préférés
-dans sa négociation, la compression ne peut pas être négociée avec ces clients.
-Si le client désactive le support SSLv2, un Hello SSLv3 ou TLS peut être
-envoyé, selon la bibliothèque SSL utilisée, et la compression peut être mise
-en oeuvre. Vous pouvez vérifier si un client utilise la compression SSL en
+Comme SSLv2 ne comportait pas de table des algorithmes de compression préférés
+dans sa négociation, la compression ne peut pas être négociée avec ces clients.
+Si le client désactive le support SSLv2, un Hello SSLv3 ou TLS peut être
+envoyé, selon la bibliothèque SSL utilisée, et la compression peut être mise
+en oeuvre. Vous pouvez vérifier si un client utilise la compression SSL en
journalisant la variable <code>%{SSL_COMPRESS_METHOD}x</code>.
</p>
</section>
<section id="lockicon"><title>Lorsque j'utilise l'authentification de base sur HTTPS,
-l'icône de verrouillage des navigateurs Netscape reste ouverte quand la boîte
-de dialogue d'authentification apparaît. Cela signifie-t-il que les utilisateur
-et mot de passe sont envoyés en clair ?</title>
-<p>Non, le couple utilisateur/mot de passe est transmis sous forme chiffrée.
- L'icône de chiffrement dans les navigateurs Netscape n'est pas vraiment
- synchronisé avec la couche SSL/TLS. Il ne passe à l'état verrouillé
- qu'au moment où la première partie des données relatives à la page web
- proprement dite sont transférées, ce qui peut prêter à confusion. Le
- dispositif d'authentification de base appartient à la couche HTTP, qui
- est située au dessus de la couche SSL/TLS dans HTTPS. Avant tout
- transfert de données HTTP sous HTTPS, la couche SSL/TLS a déjà achevé
- sa phase de négociation et basculé dans le mode de communication
- chiffrée. Ne vous laissez donc pas abuser par l'état de cet icône.</p>
-</section>
-
-<section id="msie"><title>Pourquoi des erreurs d'entrée/sortie apparaissent-elles
-lorsqu'on se connecte via HTTPS à un serveur Apache+mod_ssl avec des
+l'icône de verrouillage des navigateurs Netscape reste ouverte quand la boîte
+de dialogue d'authentification apparaît. Cela signifie-t-il que les utilisateur
+et mot de passe sont envoyés en clair ?</title>
+<p>Non, le couple utilisateur/mot de passe est transmis sous forme chiffrée.
+ L'icône de chiffrement dans les navigateurs Netscape n'est pas vraiment
+ synchronisé avec la couche SSL/TLS. Il ne passe à l'état verrouillé
+ qu'au moment où la première partie des données relatives à la page web
+ proprement dite sont transférées, ce qui peut prêter à confusion. Le
+ dispositif d'authentification de base appartient à la couche HTTP, qui
+ est située au dessus de la couche SSL/TLS dans HTTPS. Avant tout
+ transfert de données HTTP sous HTTPS, la couche SSL/TLS a déjà achevé
+ sa phase de négociation et basculé dans le mode de communication
+ chiffrée. Ne vous laissez donc pas abuser par l'état de cet icône.</p>
+</section>
+
+<section id="msie"><title>Pourquoi des erreurs d'entrée/sortie apparaissent-elles
+lorsqu'on se connecte via HTTPS à un serveur Apache+mod_ssl avec des
versions anciennes de
Microsoft Internet Explorer (MSIE) ?</title>
-<p>La première raison en est la présence dans l'implémentation SSL de
+<p>La première raison en est la présence dans l'implémentation SSL de
certaines versions de MSIE de bogues subtils en rapport avec le
dispositif de "maintien en vie" (keep-alive) HTTP, et les alertes de
notification de fermeture de session SSL en cas de coupure de la
-connexion au point d'entrée (socket). De plus, l'interaction entre
-SSL et les fonctionnalités HTTP/1.1 pose problème avec certaines
-versions de MSIE. Vous pouvez contourner ces problèmes en interdisant
-à Apache l'utilisation de HTTP/1.1, les connexions avec maintien en vie
+connexion au point d'entrée (socket). De plus, l'interaction entre
+SSL et les fonctionnalités HTTP/1.1 pose problème avec certaines
+versions de MSIE. Vous pouvez contourner ces problèmes en interdisant
+à Apache l'utilisation de HTTP/1.1, les connexions avec maintien en vie
ou l'envoi de messages de notification de fermeture de session SSL aux
clients MSIE. Pour cela, vous pouvez utiliser la directive suivante
-dans votre section d'hôte virtuel avec support SSL :</p>
+dans votre section d'hôte virtuel avec support SSL :</p>
<highlight language="config">
SetEnvIf User-Agent "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</highlight>
- <p>En outre, certaines versions de MSIE ont des problèmes avec des
- algorithmes de chiffrement particuliers. Hélas, il n'est pas
- possible d'apporter une solution spécifique à MSIE pour ces
- problèmes, car les algorithmes de chiffrement sont utilisés dès la
- phase de négociation SSL. Ainsi, une directive
- <directive module="mod_setenvif">SetEnvIf</directive> spécifique
- à MSIE ne peut être d'aucun secours. Par contre, vous devrez
- ajuster les paramètres généraux de manière drastique. Avant de
- vous décider, soyez sûr que vos clients rencontrent vraiment des
- problèmes. Dans la négative, n'effectuez pas ces ajustements car
+ <p>En outre, certaines versions de MSIE ont des problèmes avec des
+ algorithmes de chiffrement particuliers. Hélas, il n'est pas
+ possible d'apporter une solution spécifique à MSIE pour ces
+ problèmes, car les algorithmes de chiffrement sont utilisés dès la
+ phase de négociation SSL. Ainsi, une directive
+ <directive module="mod_setenvif">SetEnvIf</directive> spécifique
+ à MSIE ne peut être d'aucun secours. Par contre, vous devrez
+ ajuster les paramètres généraux de manière drastique. Avant de
+ vous décider, soyez sûr que vos clients rencontrent vraiment des
+ problèmes. Dans la négative, n'effectuez pas ces ajustements car
ils affecteront <em>tous</em> vos clients, ceux utilisant MSIE,
mais aussi les autres.</p>
</section>
<section id="srp"><title>Comment activer TLS-SRP ?</title>
- <p>TLS-SRP (Echange de clés avec mot de passe distant sécurisé,
- défini dans la RFC 5054) peut compléter ou même remplacer les
+ <p>TLS-SRP (Echange de clés avec mot de passe distant sécurisé,
+ défini dans la RFC 5054) peut compléter ou même remplacer les
certificats au cours de l'authentification d'une connexion SSL. Pour
- utiliser TLS-SRP, affectez à la directive <directive
+ utiliser TLS-SRP, affectez à la directive <directive
module="mod_ssl">SSLSRPVerifierFile</directive> un fichier de
- vérification OpenSSL SRP. Pour créer ce fichier de vérification,
+ vérification OpenSSL SRP. Pour créer ce fichier de vérification,
utilisez l'outil <code>openssl</code> :</p>
<example>
openssl srp -srpvfile passwd.srpv -add username
</example>
- <p>Une fois ce fichier créé, spécifiez-le dans la configuration SSL
+ <p>Une fois ce fichier créé, spécifiez-le dans la configuration SSL
du serveur :</p>
<example>
SSLSRPVerifierFile /path/to/passwd.srpv
</example>
- <p>Pour forcer les clients à utiliser des algorithmes de chiffrement
- non basés sur les certificats, utilisez la directive suivante :</p>
+ <p>Pour forcer les clients à utiliser des algorithmes de chiffrement
+ non basés sur les certificats, utilisez la directive suivante :</p>
<example>
SSLCipherSuite "!DSS:!aRSA:SRP"
</example>
</section>
-<section id="javadh"><title>Pourquoi des erreurs de négociation apparaissent
-avec les clients basés sur Java lorsqu'on utilise un certificat de plus
+<section id="javadh"><title>Pourquoi des erreurs de négociation apparaissent
+avec les clients basés sur Java lorsqu'on utilise un certificat de plus
de 1024 bits ?</title>
- <p>Depuis la version 2.5.0-dev et à/c du 29/09/2013,
- <module>mod_ssl</module> utilise des paramètres DH qui comportent
+ <p>Depuis la version 2.5.0-dev et à/c du 29/09/2013,
+ <module>mod_ssl</module> utilise des paramètres DH qui comportent
des nombres premiers de plus de 1024 bits. Cependant, java 7 et ses versions
- antérieures ne supportent que les nombres premiers DH d'une longueur
+ antérieures ne supportent que les nombres premiers DH d'une longueur
maximale de 1024 bits.</p>
- <p>Si votre client basé sur Java s'arrête avec une exception telle
+ <p>Si votre client basé sur Java s'arrête avec une exception telle
que <code>java.lang.RuntimeException: Could not generate DH
keypair</code> et
<code>java.security.InvalidAlgorithmParameterException: Prime size
(inclusive)</code>, et si httpd enregistre le message <code>tlsv1
alert internal error (SSL alert number 80)</code> dans son journal
des erreurs (avec un <directive module="core">LogLevel</directive>
- <code>info</code> ou supérieur), vous pouvez soit réarranger la
+ <code>info</code> ou supérieur), vous pouvez soit réarranger la
liste d'algorithmes de mod_ssl via la directive <directive
- module="mod_ssl">SSLCipherSuite</directive> (éventuellement en
+ module="mod_ssl">SSLCipherSuite</directive> (éventuellement en
conjonction avec la directive <directive
module="mod_ssl">SSLHonorCipherOrder</directive>), soit utiliser des
- paramètres DH personnalisés avec un nombre
- premier de 1024 bits, paramètres qui seront toujours prioritaires
- par rapport à tout autre paramètre DH par défaut.</p>
+ paramètres DH personnalisés avec un nombre
+ premier de 1024 bits, paramètres qui seront toujours prioritaires
+ par rapport à tout autre paramètre DH par défaut.</p>
- <p>Pour générer des paramètres DH personnalisés, utilisez la
+ <p>Pour générer des paramètres DH personnalisés, utilisez la
commande <code>openssl dhparam 1024</code>. Vous pouvez aussi
- utiliser les paramètres DH standards issus de la <a
+ utiliser les paramètres DH standards issus de la <a
href="http://www.ietf.org/rfc/rfc2409.txt">RFC 2409</a>, section 6.2 :</p>
<example><pre>-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
<section id="support"><title>Support de mod_ssl</title>
<ul>
<li><a href="#resources">Quelles sont les sources d'informations
-disponibles en cas de problème avec mod_ssl ?</a></li>
+disponibles en cas de problème avec mod_ssl ?</a></li>
<li><a href="#contact">Qui peut-on contacter pour un support en cas de
-problème avec mod_ssl ?</a></li>
+problème avec mod_ssl ?</a></li>
<li><a href="#reportdetails">Quelles informations dois-je fournir lors
-de l'écriture d'un rapport de bogue ?</a></li>
-<li><a href="#coredumphelp">Un vidage mémoire s'est produit,
+de l'écriture d'un rapport de bogue ?</a></li>
+<li><a href="#coredumphelp">Un vidage mémoire s'est produit,
pouvez-vous m'aider ?</a></li>
<li><a href="#backtrace">Comment puis-je obtenir une journalisation de
-ce qui s'est passé, pour m'aider à trouver la raison de ce vidage
-mémoire ?</a></li>
+ce qui s'est passé, pour m'aider à trouver la raison de ce vidage
+mémoire ?</a></li>
</ul>
<section id="resources"><title>Quelles sont les sources d'informations
-disponibles en cas de problème avec mod_ssl ?</title>
+disponibles en cas de problème avec mod_ssl ?</title>
<p>Voici les sources d'informations disponibles ; vous devez chercher
-ici en cas de problème.</p>
+ici en cas de problème.</p>
<dl>
- <dt>Vous trouverez des réponses dans la Foire Aux Questions du
+ <dt>Vous trouverez des réponses dans la Foire Aux Questions du
manuel utilisateur (ce document)</dt>
<dd><a href="http://httpd.apache.org/docs/&httpd.docs;/ssl/ssl_faq.html">
http://httpd.apache.org/docs/&httpd.docs;/ssl/ssl_faq.html</a><br />
Cherchez tout d'abord dans la foire aux questions
- (ce document). Si votre question est courante, on a déjà dû y
- répondre de nombreuses fois, et elle fait probablement partie
+ (ce document). Si votre question est courante, on a déjà dû y
+ répondre de nombreuses fois, et elle fait probablement partie
de ce document.
</dd>
</dl>
</section>
<section id="contact"><title>Qui peut-on contacter pour un support en cas de
-problème avec mod_ssl ?</title>
- <p>Voici toutes les possibilités de support pour mod_ssl, par ordre
- de préférence. Merci d'utiliser ces possibilités
- <em>dans cet ordre</em> - ne vous précipitez pas sur celle qui vous
- paraît la plus alléchante. </p>
+problème avec mod_ssl ?</title>
+ <p>Voici toutes les possibilités de support pour mod_ssl, par ordre
+ de préférence. Merci d'utiliser ces possibilités
+ <em>dans cet ordre</em> - ne vous précipitez pas sur celle qui vous
+ paraît la plus alléchante. </p>
<ol>
- <li><em>Envoyez un rapport de problème à la liste de diffusion de
+ <li><em>Envoyez un rapport de problème à la liste de diffusion de
support des utilisateurs d'Apache httpd</em><br />
<a href="mailto:users@httpd.apache.org">
users@httpd.apache.org</a><br />
- C'est la deuxième manière de soumettre votre rapport de
- problème. Ici aussi, vous devez d'abord vous abonner à la
+ C'est la deuxième manière de soumettre votre rapport de
+ problème. Ici aussi, vous devez d'abord vous abonner à la
liste, mais vous pourrez ensuite discuter facilement de votre
- problème avec l'ensemble de la communauté d'utilisateurs
+ problème avec l'ensemble de la communauté d'utilisateurs
d'Apache httpd.
</li>
- <li><em>Ecrire un rapport de problème dans la base de données des
+ <li><em>Ecrire un rapport de problème dans la base de données des
bogues</em><br />
<a href="http://httpd.apache.org/bug_report.html">
http://httpd.apache.org/bug_report.html</a><br />
- C'est la dernière manière de soumettre votre rapport de
- problème. Vous ne devez utiliser cette solution que si vous
- avez déjà écrit aux listes de diffusion, et n'avez pas trouvé
+ C'est la dernière manière de soumettre votre rapport de
+ problème. Vous ne devez utiliser cette solution que si vous
+ avez déjà écrit aux listes de diffusion, et n'avez pas trouvé
de solution. Merci de suivre les instructions de la page
- mentionnée ci-dessus <em>avec soin</em>.
+ mentionnée ci-dessus <em>avec soin</em>.
</li>
</ol>
</section>
<section id="reportdetails"><title>Quelles informations dois-je fournir lors
-de l'écriture d'un rapport de bogue ?</title>
+de l'écriture d'un rapport de bogue ?</title>
<p>Vous devez toujours fournir au moins les informations
suivantes :</p>
<dl>
- <dt>Les versions d'Apache httpd et OpenSSL installées</dt>
- <dd>La version d'Apache peut être déterminée en exécutant
- <code>httpd -v</code>. La version d'OpenSSL peut être déterminée
- en exécutant <code>openssl version</code>. Si Lynx est installé,
- vous pouvez aussi exécuter la commande<code>lynx -mime_header
+ <dt>Les versions d'Apache httpd et OpenSSL installées</dt>
+ <dd>La version d'Apache peut être déterminée en exécutant
+ <code>httpd -v</code>. La version d'OpenSSL peut être déterminée
+ en exécutant <code>openssl version</code>. Si Lynx est installé,
+ vous pouvez aussi exécuter la commande<code>lynx -mime_header
http://localhost/ | grep Server</code> et ainsi obtenir ces
informations en une seule fois.
</dd>
- <dt>Les détails de votre installation d'Apache httpd et OpenSSL</dt>
+ <dt>Les détails de votre installation d'Apache httpd et OpenSSL</dt>
<dd>A cet effet, vous pouvez fournir un fichier journal de votre
- session de terminal qui montre les étapes de la configuration et
- de l'installation. En cas d'impossibilité, vous devez au moins
+ session de terminal qui montre les étapes de la configuration et
+ de l'installation. En cas d'impossibilité, vous devez au moins
fournir la ligne de commande <program>configure</program> que
- vous avez utilisée.
+ vous avez utilisée.
</dd>
- <dt>En cas de vidage mémoire, inclure une trace de ce qui s'est
- passé</dt>
+ <dt>En cas de vidage mémoire, inclure une trace de ce qui s'est
+ passé</dt>
<dd>Si votre serveur Apache httpd fait un vidage de sa
- mémoire, merci de fournir en pièce jointe un fichier contenant
- une trace de la zone dédiée à la pile (voir
- <a href="#backtrace">ci-dessous</a> pour des informations sur la manière
- de l'obtenir). Il est nécessaire de disposer de ces informations
- afin de pouvoir déterminer la raison de votre vidage mémoire.
+ mémoire, merci de fournir en pièce jointe un fichier contenant
+ une trace de la zone dédiée à la pile (voir
+ <a href="#backtrace">ci-dessous</a> pour des informations sur la manière
+ de l'obtenir). Il est nécessaire de disposer de ces informations
+ afin de pouvoir déterminer la raison de votre vidage mémoire.
</dd>
- <dt>Une description détaillée de votre problème</dt>
+ <dt>Une description détaillée de votre problème</dt>
- <dd>Ne riez pas, nous sommes sérieux ! De nombreux rapports
- n'incluent pas de description de la véritable nature du problème.
- Sans ces informations, il est très difficile pour quiconque de
- vous aider. Donc, et c'est votre propre intérêt (vous souhaitez
- que le problème soit résolu, n'est-ce pas ?), fournissez, s'il vous
- plait, le maximum de détails possible. Bien entendu, vous devez
- aussi inclure tout ce qui a été dit précédemment.
+ <dd>Ne riez pas, nous sommes sérieux ! De nombreux rapports
+ n'incluent pas de description de la véritable nature du problème.
+ Sans ces informations, il est très difficile pour quiconque de
+ vous aider. Donc, et c'est votre propre intérêt (vous souhaitez
+ que le problème soit résolu, n'est-ce pas ?), fournissez, s'il vous
+ plait, le maximum de détails possible. Bien entendu, vous devez
+ aussi inclure tout ce qui a été dit précédemment.
</dd>
</dl>
</section>
-<section id="coredumphelp"><title>Un vidage mémoire s'est produit,
+<section id="coredumphelp"><title>Un vidage mémoire s'est produit,
pouvez-vous m'aider ?</title>
-<p>En général non, du moins tant que vous n'aurez pas fourni plus de
-détails à propos de la localisation dans le code où Apache a effectué
-son vidage mémoire. Ce dont nous avons en général besoin pour vous
-aider est une trace de ce qui s'est passé (voir la question suivante).
-Sans cette information, il est pratiquement impossible de déterminer
-la nature du problème et de vous aider à le résoudre.</p>
+<p>En général non, du moins tant que vous n'aurez pas fourni plus de
+détails à propos de la localisation dans le code où Apache a effectué
+son vidage mémoire. Ce dont nous avons en général besoin pour vous
+aider est une trace de ce qui s'est passé (voir la question suivante).
+Sans cette information, il est pratiquement impossible de déterminer
+la nature du problème et de vous aider à le résoudre.</p>
</section>
<section id="backtrace"><title>Comment puis-je obtenir une journalisation de
-ce qui s'est passé, pour m'aider à trouver la raison de ce vidage
-mémoire ?</title>
-<p>Vous trouverez ci-dessous les différentes étapes permettant
-d'obtenir une journalisation des évènements (backtrace) :</p>
+ce qui s'est passé, pour m'aider à trouver la raison de ce vidage
+mémoire ?</title>
+<p>Vous trouverez ci-dessous les différentes étapes permettant
+d'obtenir une journalisation des évènements (backtrace) :</p>
<ol>
- <li>Assurez-vous que les symboles de débogage sont disponibles, au
- moins pour Apache. Pour cela, sur les plates-formes où GCC/GDB est
- utilisé, vous devez compiler Apache+mod_ssl avec l'option
+ <li>Assurez-vous que les symboles de débogage sont disponibles, au
+ moins pour Apache. Pour cela, sur les plates-formes où GCC/GDB est
+ utilisé, vous devez compiler Apache+mod_ssl avec l'option
``<code>OPTIM="-g -ggdb3"</code>''. Sur les autres plates-formes,
l'option ``<code>OPTIM="-g"</code>'' est un minimum.
</li>
- <li>Démarrez le serveur et essayez de reproduire le vidage mémoire.
+ <li>Démarrez le serveur et essayez de reproduire le vidage mémoire.
A cet effet, vous pouvez utiliser une directive du style
- ``<code>CoreDumpDirectory /tmp</code>'' pour être sûr que le
- fichier de vidage mémoire puisse bien être écrit. Vous devriez
+ ``<code>CoreDumpDirectory /tmp</code>'' pour être sûr que le
+ fichier de vidage mémoire puisse bien être écrit. Vous devriez
obtenir un fichier <code>/tmp/core</code> ou
<code>/tmp/httpd.core</code>. Si ce n'est pas le cas, essayez de
lancer votre serveur sous un UID autre que root.
- Pour des raisons de sécurité, de nombreux
- noyaux modernes de permettent pas à un processus de vider sa
- mémoire une fois qu'il a accompli un <code>setuid()</code> (à moins
+ Pour des raisons de sécurité, de nombreux
+ noyaux modernes de permettent pas à un processus de vider sa
+ mémoire une fois qu'il a accompli un <code>setuid()</code> (à moins
qu'il effectue un <code>exec()</code>) car des informations d'un
- niveau privilégié pourraient être transmises en mémoire. Si
- nécessaire, vous pouvez exécuter <code>/chemin/vers/httpd -X</code>
- manuellement afin de ne pas permettre à Apache de se clôner (fork).
+ niveau privilégié pourraient être transmises en mémoire. Si
+ nécessaire, vous pouvez exécuter <code>/chemin/vers/httpd -X</code>
+ manuellement afin de ne pas permettre à Apache de se clôner (fork).
</li>
- <li>Analysez le vidage mémoire. Pour cela, exécutez
+ <li>Analysez le vidage mémoire. Pour cela, exécutez
<code>gdb /path/to/httpd /tmp/httpd.core</code> ou une commande
- similaire. Dans GDB, tout ce que vous avez à faire est d'entrer
+ similaire. Dans GDB, tout ce que vous avez à faire est d'entrer
<code>bt</code>, et voila, vous obtenez la backtrace. Pour les
- débogueurs autres que GDB consulter le manuel correspondant.
+ débogueurs autres que GDB consulter le manuel correspondant.
</li>
</ol>
</section>
<manualpage metafile="stopping.xml.meta">
- <title>Arrêt et redémarrage du serveur HTTP Apache</title>
+ <title>Arrêt et redémarrage du serveur HTTP Apache</title>
<summary>
- <p>Ce document couvre l'arrêt et le redémarrage du
+ <p>Ce document couvre l'arrêt et le redémarrage du
serveur HTTP Apache sur
- les systèmes Unix et similaires. Les utilisateurs de Windows NT, 2000
+ les systèmes Unix et similaires. Les utilisateurs de Windows NT, 2000
and XP doivent consulter
- <a href="platform/windows.html#winsvc">Exécuter httpd en tant que
+ <a href="platform/windows.html#winsvc">Exécuter httpd en tant que
service</a> et les utilisateurs de Windows 9x et ME doivent consulter
- <a href="platform/windows.html#wincons">Exécuter httpd comme une
- application de type console</a> pour plus d'informations sur le contrôle
- de httpd à partir de ces plateformes.</p>
+ <a href="platform/windows.html#wincons">Exécuter httpd comme une
+ application de type console</a> pour plus d'informations sur le contrôle
+ de httpd à partir de ces plateformes.</p>
</summary>
<seealso><program>httpd</program></seealso>
<seealso><program>apachectl</program></seealso>
-<seealso><a href="invoking.html">Démarrage</a></seealso>
+<seealso><a href="invoking.html">Démarrage</a></seealso>
<section id="introduction"><title>Introduction</title>
- <p>Afin d'arrêter ou redémarrer le serveur HTTP Apache, vous devez envoyer un signal aux
- processus <program>httpd</program> en cours d'exécution. Les signaux
- peuvent être envoyés de deux manières. La
- première méthode consiste à
+ <p>Afin d'arrêter ou redémarrer le serveur HTTP Apache, vous devez envoyer un signal aux
+ processus <program>httpd</program> en cours d'exécution. Les signaux
+ peuvent être envoyés de deux manières. La
+ première méthode consiste à
utiliser la commande unix <code>kill</code>
pour envoyer directement des signaux aux processus. Vous pouvez remarquer
- que plusieurs processus <program>httpd</program> s'exécutent sur votre
- système, mais il vous suffit d'envoyer les signaux au processus parent,
- dont le PID est enregistré dans le fichier précisé par la directive
+ que plusieurs processus <program>httpd</program> s'exécutent sur votre
+ système, mais il vous suffit d'envoyer les signaux au processus parent,
+ dont le PID est enregistré dans le fichier précisé par la directive
<directive module="mpm_common">PidFile</directive>. Autrement dit, vous
- n'aurez jamais besoin d'envoyer des signaux à aucun des
+ n'aurez jamais besoin d'envoyer des signaux à aucun des
processus enfants, mais seulement au processus parent. Quatre types
- de signaux peuvent être envoyés au processus parent :
+ de signaux peuvent être envoyés au processus parent :
<code><a href="#term">TERM</a></code>,
<code><a href="#graceful">USR1</a></code>,
<code><a href="#hup">HUP</a></code>, et
<code><a href="#gracefulstop">WINCH</a></code>, qui
- seront décrit plus loin.</p>
+ seront décrit plus loin.</p>
<p>Pour envoyer un signal au processus parent, vous devez entrer une commande
du style :</p>
<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
- <p>La seconde méthode permettant d'envoyer des signaux aux processus
+ <p>La seconde méthode permettant d'envoyer des signaux aux processus
<program>httpd</program>
- consiste à utiliser les options <code>stop</code>,
+ consiste à utiliser les options <code>stop</code>,
<code>restart</code>, <code>graceful</code> et
<code>graceful-stop</code> du commutateur <code>-k</code> de la ligne
- de commande comme décrit ci-dessous. Ce sont des arguments du binaire
- <program> httpd</program>, mais il est recommandé de les utiliser
- avec le script de contrôle <program>apachectl</program>, qui se
- chargera de les passer à <program>httpd</program>.</p>
+ de commande comme décrit ci-dessous. Ce sont des arguments du binaire
+ <program> httpd</program>, mais il est recommandé de les utiliser
+ avec le script de contrôle <program>apachectl</program>, qui se
+ chargera de les passer à <program>httpd</program>.</p>
- <p>Après avoir envoyé un signal à <program>httpd</program>, vous pouvez
+ <p>Après avoir envoyé un signal à <program>httpd</program>, vous pouvez
suivre le cours de son action en entrant :</p>
<example>tail -f /usr/local/apache2/logs/error_log</example>
- <p>Adaptez ces exemples en fonction de la définition de vos directives
+ <p>Adaptez ces exemples en fonction de la définition de vos directives
<directive module="core">ServerRoot</directive> et
<directive module="mpm_common">PidFile</directive>.</p>
</section>
-<section id="term"><title>Arrêter immédiatement</title>
+<section id="term"><title>Arrêter immédiatement</title>
<dl><dt>Signal: TERM</dt>
<dd><code>apachectl -k stop</code></dd>
</dl>
- <p>A la réception du signal <code>TERM</code> ou <code>stop</code>,
- le processus parent tente immédiatement
+ <p>A la réception du signal <code>TERM</code> ou <code>stop</code>,
+ le processus parent tente immédiatement
de tuer tous ses processus enfants. Cela peut durer plusieurs secondes.
- Après cela, le processus parent lui-même se termine. Toutes les requêtes
- en cours sont terminées, et plus aucune autre n'est traitée.</p>
+ Après cela, le processus parent lui-même se termine. Toutes les requêtes
+ en cours sont terminées, et plus aucune autre n'est traitée.</p>
</section>
-<section id="graceful"><title>Redémarrage en douceur</title>
+<section id="graceful"><title>Redémarrage en douceur</title>
<dl><dt>Signal: USR1</dt>
<dd><code>apachectl -k graceful</code></dd>
</dl>
- <p>A la réception du signal <code>USR1</code> ou
+ <p>A la réception du signal <code>USR1</code> ou
<code>graceful</code>, le
processus parent envoie aux processus enfants
- <em>l'ordre</em> de se terminer une fois leur requête courante
- traitée (ou de se terminer immédiatement s'ils n'ont plus rien à traiter).
+ <em>l'ordre</em> de se terminer une fois leur requête courante
+ traitée (ou de se terminer immédiatement s'ils n'ont plus rien à traiter).
Le processus parent relit ses fichiers de configuration et
- réouvre ses fichiers de log. Chaque fois qu'un enfant s'éteint, le
+ réouvre ses fichiers de log. Chaque fois qu'un enfant s'éteint, le
processus parent le remplace par un processus
- enfant de la nouvelle <em>génération</em> de la
- configuration, et celui-ci commence immédiatement à traiter les
- nouvelles requêtes.</p>
+ enfant de la nouvelle <em>génération</em> de la
+ configuration, et celui-ci commence immédiatement à traiter les
+ nouvelles requêtes.</p>
- <p>Ce code est conçu pour toujours respecter la directive de contrôle
+ <p>Ce code est conçu pour toujours respecter la directive de contrôle
de processus des modules MPMs, afin que les nombres de processus et de
threads
- disponibles pour traiter les demandes des clients soient maintenus à
- des valeurs appropriées tout au long du processus de démarrage.
+ disponibles pour traiter les demandes des clients soient maintenus à
+ des valeurs appropriées tout au long du processus de démarrage.
En outre, il respecte la directive
- <directive module="mpm_common">StartServers</directive> de la manière
- suivante : si après une seconde au moins <directive
+ <directive module="mpm_common">StartServers</directive> de la manière
+ suivante : si après une seconde au moins <directive
module="mpm_common">StartServers</directive> nouveaux processus
- enfants n'ont pas été créés, un nombre suffisant de processus
- supplémentaires est créé pour combler le manque. Ainsi le code
- tente de maintenir à la fois le nombre approprié de processus enfants
- en fonction de la charge du serveur, et le nombre de processus défini par la
+ enfants n'ont pas été créés, un nombre suffisant de processus
+ supplémentaires est créé pour combler le manque. Ainsi le code
+ tente de maintenir à la fois le nombre approprié de processus enfants
+ en fonction de la charge du serveur, et le nombre de processus défini par la
directive <directive module="mpm_common">StartServers</directive>.</p>
<p>Les utilisateurs du module <module>mod_status</module>
noteront que les statistiques du serveur ne sont <strong>pas</strong>
- remises à zéro quand un signal <code>USR1</code> est envoyé. Le code
- a été conçu à la fois pour minimiser la durée durant laquelle le
- serveur ne peut pas traiter de nouvelles requêtes (elle sont mises en
- file d'attente par le système d'exploitation, et ne sont ainsi jamais
- perdues) et pour respecter vos paramètres de personnalisation.
+ remises à zéro quand un signal <code>USR1</code> est envoyé. Le code
+ a été conçu à la fois pour minimiser la durée durant laquelle le
+ serveur ne peut pas traiter de nouvelles requêtes (elle sont mises en
+ file d'attente par le système d'exploitation, et ne sont ainsi jamais
+ perdues) et pour respecter vos paramètres de personnalisation.
Pour y parvenir, il doit conserver le
- <em>tableau</em> utilisé pour garder la trace de tous les processus
- enfants au cours des différentes générations.</p>
+ <em>tableau</em> utilisé pour garder la trace de tous les processus
+ enfants au cours des différentes générations.</p>
- <p>Dans son état des processus,
- le module status utilise aussi un caractère <code>G</code> afin d'indiquer
- quels processus enfants ont encore des traitements de requêtes en cours
- débutés avant que l'ordre graceful restart ne soit donné.</p>
+ <p>Dans son état des processus,
+ le module status utilise aussi un caractère <code>G</code> afin d'indiquer
+ quels processus enfants ont encore des traitements de requêtes en cours
+ débutés avant que l'ordre graceful restart ne soit donné.</p>
<p>Pour l'instant, il est impossible pour un script de rotation
des logs utilisant
- <code>USR1</code> de savoir de manière certaine si tous les processus
- enfants inscrivant des traces de pré-redémarrage sont terminés.
- Nous vous suggérons d'attendre un délai suffisant après l'envoi du
+ <code>USR1</code> de savoir de manière certaine si tous les processus
+ enfants inscrivant des traces de pré-redémarrage sont terminés.
+ Nous vous suggérons d'attendre un délai suffisant après l'envoi du
signal <code>USR1</code>
avant de faire quoi que ce soit avec les anciens logs. Par exemple,
si la plupart de vos traitements durent moins de 10 minutes pour des
- utilisateurs empruntant des liaisons à faible bande passante, alors vous
+ utilisateurs empruntant des liaisons à faible bande passante, alors vous
devriez attendre 15 minutes avant de faire quoi que ce soit
avec les anciens logs.</p>
<note>
- <p>Lorsque vous initiez un redémarrage, une vérification de
- la syntaxe est tout d'abord effectuée, afin de s'assurer qu'il n'y a
+ <p>Lorsque vous initiez un redémarrage, une vérification de
+ la syntaxe est tout d'abord effectuée, afin de s'assurer qu'il n'y a
pas d'erreurs dans les fichiers de configuration. Si votre fichier de
configuration comporte des erreurs de syntaxe, vous recevrez un message
- d'erreur les concernant, et le serveur refusera de redémarrer. Ceci
- permet d'éviter la situation où un serveur a
- été arrêté et ne peut plus redémarrer,
- et où vous vous retrouvez avec un serveur hors-service.</p>
-
- <p>Ceci ne garantit pas encore que le serveur va redémarrer
- correctement. Pour vérifier la sémantique des fichiers de configuration
- en plus de leur syntaxe, vous pouvez essayer de démarrer
+ d'erreur les concernant, et le serveur refusera de redémarrer. Ceci
+ permet d'éviter la situation où un serveur a
+ été arrêté et ne peut plus redémarrer,
+ et où vous vous retrouvez avec un serveur hors-service.</p>
+
+ <p>Ceci ne garantit pas encore que le serveur va redémarrer
+ correctement. Pour vérifier la sémantique des fichiers de configuration
+ en plus de leur syntaxe, vous pouvez essayer de démarrer
<program>httpd</program> sous un utilisateur non root.
S'il n'y a pas d'erreur, il tentera d'ouvrir ses sockets et ses fichiers
- de log et échouera car il n'a pas les privilèges root (ou parce que
+ de log et échouera car il n'a pas les privilèges root (ou parce que
l'instance actuelle de
- <program>httpd</program> est déjà associée à ces ports). S'il échoue
+ <program>httpd</program> est déjà associée à ces ports). S'il échoue
pour toute autre raison, il y a probablement une erreur dans le
- fichier de configuration et celle-ci doit être corrigée avant de lancer
- le redémarrage en douceur.</p></note>
+ fichier de configuration et celle-ci doit être corrigée avant de lancer
+ le redémarrage en douceur.</p></note>
</section>
-<section id="hup"><title>Redémarrer immédiatement</title>
+<section id="hup"><title>Redémarrer immédiatement</title>
<dl><dt>Signal: HUP</dt>
<dd><code>apachectl -k restart</code></dd>
</dl>
- <p>A la réception du signal <code>HUP</code> ou
+ <p>A la réception du signal <code>HUP</code> ou
<code>restart</code>, le
processus parent tue ses processus enfants comme pour le signal
<code>TERM</code>, mais le processus parent ne se termine pas.
- Il relit ses fichiers de configuration, et réouvre ses fichiers de log.
- Puis il donne naissance à un nouveau jeu de processus enfants
- et continue de traiter les requêtes.</p>
+ Il relit ses fichiers de configuration, et réouvre ses fichiers de log.
+ Puis il donne naissance à un nouveau jeu de processus enfants
+ et continue de traiter les requêtes.</p>
<p>Les utilisateurs du module <module>mod_status</module>
- noteront que les statistiques du serveur sont remises à zéro quand un
- signal <code>HUP</code> est envoyé.</p>
+ noteront que les statistiques du serveur sont remises à zéro quand un
+ signal <code>HUP</code> est envoyé.</p>
-<note>Comme dans le cas d'un redémarrage "graceful", une
-vérification de la syntaxe est effectuée avant que le
-redémarrage ne soit tenté. Si votre fichier de configuration comporte
-des erreurs de syntaxe, le redémarrage ne sera pas effectué, et
+<note>Comme dans le cas d'un redémarrage "graceful", une
+vérification de la syntaxe est effectuée avant que le
+redémarrage ne soit tenté. Si votre fichier de configuration comporte
+des erreurs de syntaxe, le redémarrage ne sera pas effectué, et
vous recevrez un message concernant ces erreurs.</note>
</section>
-<section id="gracefulstop"><title>Arrêt en douceur</title>
+<section id="gracefulstop"><title>Arrêt en douceur</title>
<dl><dt>Signal : WINCH</dt>
<dd><code>apachectl -k graceful-stop</code></dd>
</dl>
- <p>A la réception du signal <code>WINCH</code> ou
+ <p>A la réception du signal <code>WINCH</code> ou
<code>graceful-stop</code>, le
- processus parent <em>ordonne</em> à ses processus enfants
- de s'arrêter après le traitement de leur requête en cours
- (ou de s'arrêter immédiatement s'ils n'ont plus de requête à traiter).
+ processus parent <em>ordonne</em> à ses processus enfants
+ de s'arrêter après le traitement de leur requête en cours
+ (ou de s'arrêter immédiatement s'ils n'ont plus de requête à traiter).
Le processus parent va alors supprimer son fichier
- <directive module="mpm_common">PidFile</directive> et cesser l'écoute
- de tous ses ports. Le processus parent va continuer à s'exécuter,
+ <directive module="mpm_common">PidFile</directive> et cesser l'écoute
+ de tous ses ports. Le processus parent va continuer à s'exécuter,
et va surveiller les processus enfants
- qui ont encore des requêtes à traiter. Lorsque tous les processus enfants
- ont terminé leurs traitements et se sont arrêtés ou lorsque le délai
- spécifié par la directive <directive
- module="mpm_common">GracefulShutdownTimeout</directive> a été atteint,
- le processus parent s'arrêtera à son tour. Si ce délai est atteint,
- tout processus enfant encore en cours d'exécution se verra envoyer
+ qui ont encore des requêtes à traiter. Lorsque tous les processus enfants
+ ont terminé leurs traitements et se sont arrêtés ou lorsque le délai
+ spécifié par la directive <directive
+ module="mpm_common">GracefulShutdownTimeout</directive> a été atteint,
+ le processus parent s'arrêtera à son tour. Si ce délai est atteint,
+ tout processus enfant encore en cours d'exécution se verra envoyer
le signal <code>TERM</code>
- afin de le forcer à s'arrêter.</p>
+ afin de le forcer à s'arrêter.</p>
- <p>L'envoi du signal <code>TERM</code> va arrêter immédiatement
- les processus parent et enfants en état "graceful". Cependant,
+ <p>L'envoi du signal <code>TERM</code> va arrêter immédiatement
+ les processus parent et enfants en état "graceful". Cependant,
comme le fichier <directive module="mpm_common">PidFile</directive>
- aura été supprimé, vous ne pourrez pas utiliser
+ aura été supprimé, vous ne pourrez pas utiliser
<code>apachectl</code> ou <code>httpd</code> pour envoyer ce signal.</p>
- <note><p>Le signal <code>graceful-stop</code> vous permet d'exécuter
- simultanément plusieurs instances de <program>httpd</program>
- avec des configurations identiques. Ceci s'avère une fonctionnalité
- puissante quand vous effectuez des mises à jour "en douceur"
+ <note><p>Le signal <code>graceful-stop</code> vous permet d'exécuter
+ simultanément plusieurs instances de <program>httpd</program>
+ avec des configurations identiques. Ceci s'avère une fonctionnalité
+ puissante quand vous effectuez des mises à jour "en douceur"
de httpd ; cependant, cela peut aussi causer des blocages fatals et des
- situations de compétition (race conditions)
+ situations de compétition (race conditions)
avec certaines configurations.</p>
<p>On a pris soin de s'assurer que les fichiers sur disque
comme les fichiers verrou (<directive
module="core">Mutex</directive>) et les fichiers socket Unix
(<directive module="mod_cgid">ScriptSock</directive>) contiennent le PID
- du serveur, et coexistent sans problème. Cependant, si une directive de
- configuration, un module tiers ou une CGI résidente utilise un autre
- verrou ou fichier d'état sur disque, il faut prendre soin de s'assurer
- que chaque instance de <program>httpd</program> qui s'exécute
- n'écrase pas les fichiers des autres instances.</p>
+ du serveur, et coexistent sans problème. Cependant, si une directive de
+ configuration, un module tiers ou une CGI résidente utilise un autre
+ verrou ou fichier d'état sur disque, il faut prendre soin de s'assurer
+ que chaque instance de <program>httpd</program> qui s'exécute
+ n'écrase pas les fichiers des autres instances.</p>
- <p>Vous devez aussi prendre garde aux autres situations de compétition,
+ <p>Vous devez aussi prendre garde aux autres situations de compétition,
comme l'enregistrement des logs avec un transfert de ceux-ci
via un pipe vers le programme <program>rotatelogs</program>. Plusieurs instances
du programme <program>rotatelogs</program> qui tentent d'effectuer
- une rotation des mêmes fichiers de log en même temps peuvent détruire
+ une rotation des mêmes fichiers de log en même temps peuvent détruire
mutuellement leurs propres fichiers de log.</p></note>
</section>
écrasés par aucune directive <code>ServerAlias</code>.</p>
<p>Pour chaque serveur virtuel, diverses valeurs sont initialisées
- par défaut. En particulier :</p>
+ par défaut. En particulier :</p>
<ol>
<li>Dans le cas où un serveur virtuel ne contient pas de directives
<section id="hostmatching"><title>Choix du serveur virtuel</title>
<p>À la réception d'une requête, le serveur procède comme suit pour
- déterminer quel serveur virtuel utiliser :</p>
+ déterminer quel serveur virtuel utiliser :</p>
<section id="hashtable"><title>Recherche de l'adresse IP</title>
<p>En plus des points évoqués sur la page des
<a href="../dns-caveats.html#tips">problèmes liés au DNS</a>,
- voici quelques points intéressants :</p>
+ voici quelques points intéressants :</p>
<ul>
<li>Toujours positionner les définitions relatives au serveur
une requête est envoyée à <code>www.example.com</code> ou
<code>www.example.org</code>.</p>
- <note><title>Note :</title><p>La configuration de serveurs virtuels
+ <note><title>Note :</title><p>La configuration de serveurs virtuels
sous Apache ne provoque pas leur apparition magique dans la
configuration du DNS. Il <em>faut</em> que leurs noms soient
définis dans le DNS, et qu'ils y soient résolus sur l'adresse IP
serveur virtuel
<code>ServerName www.example.com</code> se trouve en premier dans le fichier
de configuration, il a la plus grande priorité et peut être vu
- comme serveur <cite>par défaut</cite> ou <cite>primaire</cite> ;
+ comme serveur <cite>par défaut</cite> ou <cite>primaire</cite> ;
ce qui signifie que toute requête reçue ne correspondant à aucune
des directives <directive module="core">ServerName</directive> sera servie par ce premier
<directive type="section" module="core">VirtualHost</directive>.</p>
contenu différent en fonction de l'adresse IP ou du port.</p>
<note>
- <title>Note :</title>
+ <title>Note :</title>
<p>Vous pouvez remplacer <code>*</code>
par une adresse IP du système. Le serveur virtuel concerné
d'une seule adresse IP.</title>
<note>
- <title>Note :</title><p>Toutes les techniques présentées ici
+ <title>Note :</title><p>Toutes les techniques présentées ici
peuvent être étendues à un plus grand nombre d'adresses IP.</p>
</note>
module="core">VirtualHost</directive>.</p>
<note>
- <title>Note :</title><p>Sur le réseau interne, il est possible
+ <title>Note :</title><p>Sur le réseau interne, il est possible
d'utiliser le nom raccourci <code>server</code> au lieu du nom
complet <code>server.example.com</code>.</p>
servie par le serveur sub1-vhost que si le client envoie un en-tête
<code>Host:</code> correct. Si aucun en-tête <code>Host:</code>
n'est transmis, le serveur primaire sera utilisé.</p>
- <p>Notez qu'il y a une singularité : une requête sur
+ <p>Notez qu'il y a une singularité : une requête sur
<code>http://www.sub2.domain.tld/sub1/</code> est également servie
par le serveur sub1-vhost si le client n'envoie pas d'en-tête
<code>Host:</code>.</p>
de fichiers journaux, plus un nombre constant compris entre 10 et 20
pour son fonctionnement interne. Les systèmes d'exploitation Unix
limitent le nombre de descripteurs de fichiers utilisables par
- processus ; une valeur courante pour cette limite est de 64, et
+ processus ; une valeur courante pour cette limite est de 64, et
cette valeur peut le plus souvent être augmentée.</p>
<p>Apache tente d'accroître cette valeur limite si nécessaire, mais
- sans y parvenir dans les cas suivants :</p>
+ sans y parvenir dans les cas suivants :</p>
<ol>
<li>Le système d'exploitation ne permet pas l'utilisation d'appels
fichiers inférieurs à 256. (sous Solaris 2).</li>
</ol>
- <p>En cas de problème, Vous pouvez :</p>
+ <p>En cas de problème, Vous pouvez :</p>
<ul>
<li>Réduire le nombre de fichiers journaux, en ne spécifiant
plusieurs serveurs virtuels dans un même fichier journal, vous voudrez
ensuite pouvoir scinder ces informations à des fins de statistiques, par
exemple, sur les différents serveurs virtuels. Il est possible de procéder
-de la manière suivante :</p>
+de la manière suivante :</p>
<p>Tout d'abord, vous devez ajouter le nom du serveur virtuel à chaque
entrée du journal. Ceci se paramètre au moyen de la directive
<directive module="mod_log_config"> LogFormat</directive> et de la
variable <code>%v</code>. Ajoutez cette variable au début de la chaîne
-de définition du format de journalisations :</p>
+de définition du format de journalisations :</p>
<highlight language="config">
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
</highlight>
<p>Cette configuration va provoquer la création d'un fichier de
-journalisation au format standard (CLF : 'Common Log Format'), mais dont
+journalisation au format standard (CLF : 'Common Log Format'), mais dont
chaque ligne débutera par le nom canonique du serveur virtuel (spécifié
par la directive <directive module="core">ServerName</directive>).
(Voir <module>mod_log_config</module> pour d'autres informations sur la
utilisé. Ce programme peut être trouvé dans le répertoire
<code>support</code> de la distribution d'Apache.</p>
-<p>Exécutez ce programme au moyen de la commande :</p>
+<p>Exécutez ce programme au moyen de la commande :</p>
<example>
split-logfile < /logs/multiple_vhost_log
domaine, soit de faire tourner un unique processus résident qui
gère tous les serveurs virtuels.</p>
- <p>Utilisez des processus résidents multiples lorsque :</p>
+ <p>Utilisez des processus résidents multiples lorsque :</p>
<ul>
<li>il y a des problèmes de répartition de sécurité, tels
et un autre pour l'adresse restante).</li>
</ul>
- <p>Utilisez un unique processus résident lorsque :</p>
+ <p>Utilisez un unique processus résident lorsque :</p>
<ul>
<li>le partage de la configuration httpd entre les serveurs
chacune d'elle, utilisez la directive
<directive module="mpm_common">Listen</directive> dans le fichier
de configuration pour définir l'adresse IP (ou serveur virtuel)
- que le processus résident doit gérer. Par exemple :</p>
+ que le processus résident doit gérer. Par exemple :</p>
<highlight language="config">
Listen 192.0.2.100:80
<directive module="core">ErrorLog</directive> et
<directive module="mod_log_config">TransferLog</directive> ou
<directive module="mod_log_config">CustomLog</directive> avec des
- valeurs différentes pour chaque serveur virtuel. Par exemple :</p>
+ valeurs différentes pour chaque serveur virtuel. Par exemple :</p>
<highlight language="config">
<VirtualHost 172.20.30.40:80>
utilisées à l'intérieur d'une directive VirtualHost si l'exécution se fait
sous suEXEC. (Voir <a href="../suexec.html">suEXEC</a>).</p>
- <p><em>SÉCURITÉ :</em> lorsque vous spécifiez où écrire les
+ <p><em>SÉCURITÉ :</em> lorsque vous spécifiez où écrire les
fichiers journaux, soyez attentif aux risques si quelqu'un d'autre
que celui qui a démarré Apache dispose des droits d'écriture
sur l'emplacement de ces fichiers. Consultez les
<code>www.example.com</code> et que vous souhaitez ajouter le
serveur virtuel <code>other.example.com</code> qui pointe sur
la même adresse IP. Il vous suffit d'ajouter la configuration
- suivante à <code>httpd.conf</code> :</p>
+ suivante à <code>httpd.conf</code> :</p>
<highlight language="config">
<VirtualHost *:80>
<directive type="section" module="core">VirtualHost</directive>
ci-dessus, la directive <directive module="core">ServerAlias</directive>
indique aux utilisateurs les autres noms permis pour accéder au
- même site Web :</p>
+ même site Web :</p>
<highlight language="config">
ServerAlias example.com *.example.com