Voici un article présentant comment installer IIS 6 et comment le configurer, ainsi que quelques recommandations générales. Il n'y a évidemment pas de configuration type car les besoins vont variés selon l'application, les objectifs et la qualité de service attendue.

Il y a deux manières d'installer IIS via l'interface graphique :

  • Manage Your Server
    • En ajoutant un rôle
  • Add/Remove Windows Components
    • Via "Add or Remove programs"

C'est cette seconde méthode que nous utiliserons dans cet article

Installation

Cette partie sera très rapide car l'installation se fait en fonction de ce dont on a besoin pour le serveur Web.

  • Allez dans Start > Control Panel > Add or Remove Programs

  • Cliquez sur Add/Remove Windows Components

  • Sélectionnez Application Server
    • Si vous voulez l'installation par défaut, cliquez sur "Next", sinon sur "Details" et sélectionnez ce qui vous intéresse, puis cliquez sur "OK" et ensuite sur "Next"

Voila… IIS est installé. C'était une épreuve de longue haleine !

Configuration

Nous allons maintenant nous intéresser à la configuration de IIS.

La configuration par défaut est souvent la plus adaptée même si quelques modifications peuvent être indispensables pour les besoins d'une application spécifique ou pour être en accord avec le fonctionnement de l'entreprise.

Pour lancer IIS :

  • Cliquez sur Start > Run
  • Tapez inetmgr
  • Cliquez sur OK

Ou

  • Cliquez sur Start > Administrative Tools > Internet Information Services (IIS) Manager

    Server Properties

Regardons les propriétés au niveau du serveur et plus particulièrement "Enable Direct Metabase Edit". Cette option va nous permettre d'éditer le fichier de la métabase (située dans C:\Windows\System32\Inetsrv\Metabase.xml) directement via notepad même si IIS est en train de l'utiliser.

Si cette option n'est pas cochée, à défaut d'utiliser l'interface d'administration IIS, vous devrez stopper IIS pour pouvoir enregistrer les modifications du fichier métabase. En effet, la métabase est en lecture seule lorsque IIS est démarré.

Si nous développons l'arborescence du serveur (local computer) il y a plusieurs catégories :

  • FTP Sites (si installé) – nous ne détaillerons pas la configuration FTP dans cet article
  • Application Pools
  • Web Sites
  • Web Service Extensions

    Application Pools

Dans IIS, tout(e) application/site est attaché(e) à un application pool et va exécuter son code dans un processus appelé "W3WP.exe". A un application pool correspond au moins un processus "W3WP.exe".

L'application pool défini la configuration du processus "W3WP.exe" (son "contexte d'exécution", sa durée de vie…).

Note : En général, il est préférable d'isoler chaque application/site dans un application pool dédié. En effet, si une application plante, seul le processus hébergeant cette dernière sera impacté.

Comment créer un application pool ? Rien de plus simple…

  • Clique droit sur "Application Pools", New > Application Pool…
  • Dans "Application Pool ID:" entrez le nom de votre application pool (ici Blog Friis qui sera également le nom de notre site web)
  • Cliquez sur "OK"

C'est fini !

Regardons d'un peu plus près les propriétés d'un application pool (clique droit sur l'application pool puis "Properties") 

                        Recycling

                        

Le recyclage est un paramètre très important dans IIS.

Le recyclage consiste à redémarrer les applications pools, généralement de façon transparente, et donc de récupérer des ressources système.

Le principe est assez simple. Quand IIS va recycler un processus "W3WP.exe", il lance tout d'abord un nouveau "W3WP.exe" qui va prendre en charge toute nouvelle requête entrante.

Une fois que le nouveau "W3WP.exe" est opérationnel, l'ancien va arrêter de prendre en charge les nouvelles requêtes et finir d'exécuter celles qui sont en cours. Une fois qu'il aura terminé cette opération, il va s'arrêter.

Bien qu'aucune requête ne soit perdue, le recyclage peut provoquer deux symptômes pour les utilisateurs :

  1. Un ralentissement lors de la première requête sur le nouveau "W3WP.exe" car IIS doit recompiler le code et recharger les différentes assemblies
  2. Si le site web nécessite une authentification et qu'elle n'est pas gérée en "Out-Of-Process", les utilisateurs devront se ré-authentifier (Pour solutionner ce point pour des applications ASP.NET je vous invite à consulter cet article : http://blogs.msdn.com/friis/archive/2008/12/02/asp-net-session-state-ou-gestion-de-l-authentification-en-out-of-process-pour-iis-6.aspx)

Différents critères peuvent déclencher un recyclage.

Par défaut, le recyclage se produit toutes les 29 heures (1740 minutes). On peut également définir un recyclage en fonction de la consommation mémoire & du nombre de requêtes. L'inconvénient de ces critères est qu'on ne sait pas quand le recyclage aura lieu. Ceci peut être impactant pour certaines applications. Si vous ne voulez pas que le recyclage survienne aléatoirement vous pouvez alors définir une heure précise.

Réfléchir à la mise en place du recyclage est indispensable pour garantir un haut degré de disponibilité de vos applications.

Pour plus d'information sur le recyclage :

Performance

                        

Ici le paramétrage par défaut est de mise.

Le champ "Idle timeout" indique que l'on va arrêter le processus "W3WP.exe" (ou Worker process) après 20 minutes d'inactivité. Il sera relancé automatiquement si une nouvelle requête est envoyée.

Le champ "Request queue limit" indique le nombre maximum de requêtes que l'on va pouvoir garder en "file d'attente" au niveau du driver HTTP.sys. Ce dernier est le driver (fonctionnant au niveau « Kernel ») qui prend en charge toute requête HTTP entrante. Sur la version RTM de Windows 2003 cette valeur était de 4000 par défaut, mais, pour un bon rapport entre performance et consommation mémoire/CPU, il a été décidé de diminuer la valeur à 1000 ce qui est largement suffisant.

Le champ "Web Garden" est un champ très spécial et nous vous recommandons de ne pas y toucher sauf si un ingénieur du support Microsoft vous le recommande ou si votre application a été conçue pour utiliser ce mécanisme. Précédemment, je vous indiquais qu'à un application pool correspondait au moins un processus "W3WP.exe". En modifiant cette valeur, à 2 par exemple, on aura 2 processus "W3WP.exe" pour le même application pool. Attention ! Si l'utilisation de "Web Garden" peut apparaître comme séduisante, il faut aussi savoir que, si l'application ne respecte pas certaines règles, ce choix peut engendrer des problèmes de performances, de pertes de requêtes et, dans le pire des cas, des problèmes de crash (cf : http://blogs.technet.com/mscom/archive/2007/07/10/gardening-on-the-web-server.aspx)

Health

                        

Ici également le paramétrage par défaut est le plus intéressant.

Avec "Enable Pinging" le service W3SVC va pinger toutes les 30 secondes le worker process. Si ce dernier ne répond pas ou remonte un problème, W3SVC l'arrête et en relance un autre. Evitez d'utiliser une valeur trop faible pour la "fréquence du ping" qui, en plus d'impacter les performances du serveur, pourrait provoquer des redémarrages intempestifs de l'application pool.

Le champ "Enable rapid-fail protection" permet de protéger votre serveur de certains dommages. Par exemple, si on rencontre 5 redémarrages de l'application pool en 5 minutes, IIS va stopper ce dernier pour éviter d'endommager le serveur. Une erreur de type "503-Service Unavailable" sera renvoyée aux utilisateurs essayant d'accéder à l'application utilisant cet application pool.

Pour plus d'information sur le Rapid-Fail Protection :

Le "Startup time limit" indique que l'on veut que le processus "W3WP.exe" soit démarré au maximum dans les 90 secondes.

Le "Shutdown time limit" indique que le worker process a 90 secondes pour s'arrêter. Si cette limite est dépassée, le processus "W3WP.exe" est tué.

Identity

                        

Cet onglet permet de configurer l'identité avec laquelle va tourner le processus "W3WP.exe". Par défaut, cette identité est "Network Service". Sous Windows 2000 l'identité utilisée était "Local Service". Cependant, pour des raisons de sécurité, nous utilisons maintenant "Network Service" qui est un compte beaucoup moins permissif. Vous pouvez également spécifier un compte que vous avez créé. Il ne faut surtout pas oublier d'ajouter ce compte dans le groupe "IIS_WPG" sinon l'application pool ne démarrera pas.

Nous venons de terminer la partie concernant l'application pool.

Ce qu'il faut retenir :

  • La configuration par défaut est la mieux adaptée pour la plupart des applications
  • Il est important de bien réfléchir à la mise en place d'un recyclage régulier
  • Faire attention à l'identité utilisée pour l'application pool

Web Sites

La création d'un site est une action très simple

  • Clique droit sur "Web Sites", New > Web Site…
  • Et ensuite vous cliquez sur Next, jusqu'à cliquer sur finish
    • Vous pourrez renseigner le nom descriptif du site web (Ex : Blog Friis), le port sur lequel vous voulez qu'il écoute, son emplacement sur le disque et ses permissions.

Toutes les options de l'installation sont ensuite configurable via les propriétés. Il faut juste faire attention au port que vous utilisez car, si vous laissez le port 80 pour le nouveau site, il sera directement arrêté pour éviter tout conflit avec le Default Web Site qui tourne également sur le port 80. Il faudra donc stopper le Default Web Site et démarrer celui que vous venez de créer.

Jetons un coup d'œil à ces fameuses propriétés. Nous ne détaillerons ici que les onglets pour une installation basique.

Web Site

Ici la première chose à faire, à part changer le port si nécessaire, c'est de cliquer sur "Properties…", d'allez dans l'onglet "Advanced" et de cocher le champ "Time Taken".

Ceci va ajouter un champ dans les logs IIS qui enregistrera le temps qu'une requête met à s'exécuter (cf : http://support.microsoft.com/kb/944884)

Cette fonctionnalité est pratique pour rechercher une éventuelle corrélation entre des problèmes de temps de réponses et des requêtes spécifiques. Dans l'onglet "General" vous pouvez affiner les options de générations des logs IIS si vous le désirez.

Dans l'onglet "Web Site" on peut également désactiver le "Keep-alive HTTP" mais je vous conseille vivement de le laisser activé.

Home Directory

                        

Comme vous pouvez le voir, on peut à tout moment changer le répertoire physique (ici, "C:\friis") sur lequel pointe le site.

Nous avons également les permissions de lecture, d'écriture (par écriture, on entend "upload"), d'exploration du répertoire,… qui sont configurables.

"Application settings" permet de définir le contexte d'exécution de l'application :

  • Execute permissions : C'est ici que l'on va dire si on veut exécuter uniquement du contenu statique (none), des scripts (Scripts only) ou des scripts et des exécutables (Scripts and Executables)
    • A vous de voir en fonction de vos besoins
    • Si l'erreur suivante est remontée c'est que la permission n'est pas suffisante "HTTP Error 403.1 - Forbidden: Execute access is denied."
  • Application pool : ce paramètre est extrêmement important. Vous allez pouvoir sélectionner l'application pool précédemment créé pour pouvoir isoler cette application dans son propre worker process.
    • L'avantage c'est que si l'application plante, seul le worker process de cette application sera impacté laissant ainsi les autres worker process indemnes. De plus, dédier un processus à une application peut améliorer ses performances car celle-ci ne partagera pas son espace mémoire avec d'autres applications. Bien sûr, il faut rester dans une limite raisonnable car créer 100 processus "W3WP.exe" impactera très fortement le serveur…

Documents

                        

On pourrait penser que cet onglet n'a aucune importance. Et pourtant…

Effectivement il ne sert qu'à configurer le document par défaut qui va être chargé lorsqu'on lance le site ou l'application. Par défaut, IIS ajoute les trois pages suivantes : Default.htm, Default.asp, index.htm

Au chargement de la première page du site, IIS va vérifier cette liste et regarder s'il trouve la page Default.htm dans le répertoire physique. S'il la trouve, il l'affiche, sinon il essaye avec Default.asp et ainsi de suite.

Notez que si vous ajoutez un document par défaut comme "Friis.aspx", ce dernier va se retrouver en fin de liste. Si vous n'avez aucun des trois premiers documents, IIS va réaliser trois accès consécutifs pour tenter de retourner chacun des documents avant de pouvoir retourner la page "Friis.aspx", lors du quatrième accès.

Cela ne semble pas très consommateur, mais quand on traite 72 millions de connexions par jour, c'est un gain de temps et de ressources considérable. La solution est de supprimer les pages inutiles ou d'utiliser le bouton "Move Up" pour que la page "Friis.aspx" soit la première recherchée.

Directory Security

                        

C'est ici que l'on configure l'authentification, SSL, les certificats… Je ne vais pas vous dire comment configurer cette partie vu que cela dépend réellement de votre application. De plus, il y a beaucoup de choses à dire sur ce point donc nous en reparlerons dans un futur article J

ASP.NET

                        

Si vous avez installé ASP.NET, vérifiez bien que la version renseignée dans ce champ correspond à celle de votre application. Par défaut, lors de la création d'un site, IIS renseigne la version la moins récente. Donc si vous avez le Framework .NET 1.1 et le 2.0, c'est la version 1.1 qui sera renseignée.

Web Service Extensions

Ceci permet d'autoriser ou d'interdire certaines extensions comme ASP.NET ou ASP.

Si vous avez une erreur du type :

  • HTTP Error 404.2 - Web service extension lockdown policy prevents this request.

Vérifiez que l'extension est bien activée…

Recommandations

Tout au long de cet article j'ai formulé des recommandations pour la configuration mais il en reste quelques unes que vous pouvez appliquer

  • La compression statique
  • 10 moyens d'augmenter les performances de votre serveur IIS 6 : http://technet.microsoft.com/en-us/magazine/cc160755.aspx
    • Cet article propose différents points pour améliorer les performances sur IIS 6 comme passer le serveur en mode « Shift Priority for the Working Set ». On va prioritiser l'utilisation du Working Set (mémoire physique) pour gagner en rapidité. Cependant il vaut mieux avoir suffisamment de mémoire et il faut impérativement que le serveur ne fonctionne uniquement qu'en mode Serveur IIS.
      • Pour ce faire, allez dans "Control Panel > System". Dans la fenêtre « System Properties » dans l'onglet « Advanced », cliquez sur le bouton « Settings » de la rubrique « Performance ». Dans la fenêtre « Performance Options », dans l'onglet « Advanced », sélectionnez l'option « Programs » de la rubrique « Memory Usage ».
    • Il y a cependant des points dans cet article que je ne recommande pas. Si vous tenez à les mettre en place, surtout testez les bien avant de mettre en production
      • Enable HTTP Compression (point 3)
      • Grow a Web Garden (point 4)
      • Limit Queue Length (point 7)

Voilà, je pense que vous avez toutes les cartes en main pour créer un Serveur Web qui saura être performant et fiable. Après, tout dépend de votre application !!! Donc n'oubliez pas de réaliser des tests avant de mettre en production J

J'espère que cet article pourra vous être utile & vous apportera quelques éclaircissements.

@ Bientôt

Sylvain Lecerf et L'équipe de support IIS Microsoft France