Serveur APACHE principes et fonctionnement
Transcription
Serveur APACHE principes et fonctionnement
Serveur APACHE principes et fonctionnement Table des matières I. II. 1. a) b) c) 2. 3. a) b) 4. a) b) c) d) e) f) 5. a) b) c) Introduction…………………………………………….……………………..1 A qui s’adresse ce cours ; pré-requis ; objectifs Fonctionnement de base du serveur Apache……….………….2 A quoi sert le serveur Apache………………………………………….3 Demande initiale de l’utilisateur Programme RPG en Fonctionnement Envoi de la page HTML à l’utilisateur demandeur L’adresse IP…………………………………………………………….……….4 Division en instances du serveur Apache………………………….4 Connaitre les instances disponibles du serveur Apache Modifier le démarrage automatique de l’instance à l’IPL Le fichier de configuration httpd.conf……………………………..5 Accéder au fichier de configuration Modifier le port Chemin pour les images La directory Les autorisations dans httpd.conf Profil et mots de passe Apache dans RePeGlio Apache géré par le Back Office i/OS………………………………..8 La notion de travail La notion de *libl Droits utilisateurs *USRPRF Serveur Apache Page 1 Serveur APACHE principes et fonctionnement I. Introduction A qui s’adresse ce cours Ce cours s’adresse aux développeurs IBM i qui n’ont aucune connaissance en « nouvelles technologies ». Le cours a pour objet de décrire le mode de fonctionnement du serveur Apache vu sous l’angle des programmes RPG CGIDEV2 générés par RePeGlio. Pré-requis Il est indispensable d’avoir créé automatiquement une instance d’Apache avec la brochure « Instance Apache et paramétrage ». Il est conseillé d’avoir déjà généré automatiquement un premier programme qui fonctionne dans un navigateur. Objectifs du cours Savoir comment fonctionne le serveur Apache Savoir modifier le port Savoir modifier une directory existante Gérer les autorisations Gérer Apache en Back-Office (au travers de l’ i/OS). Serveur Apache Page 2 Serveur APACHE principes et fonctionnement II. Fonctionnement de base du serveur Apache 1. A quoi sert le serveur Apache Un utilisateur quelque part dans le monde (extranet) ou à l’intérieur de l’entreprise (intranet) effectue une demande via une URL (par exemple en cliquant sur un lien). Suite à cette demande, le serveur Apache appelle un programme RPG qui s’exécute et retourne à l’utilisateur une page HTML qui sera interprétée par son navigateur favori. La réception d’une demande, l’appel du programme RPG et l’envoi à l’utilisateur demandeur de la page HTML construite par le programme RPG sont les fonctions réseau pris en charge par le serveur Apache. Exemple de lien URL: http://217.128.38.33/serverp/comhqe http:// est le protocole http. A ce propos, notons seulement qu’Apache est un serveur http. 217.128.38.33 est l’adresse IP fixe du réseau local attribué par le fournisseur internet. Le port est absent, donc le port :80 est pris par défaut. Un seul port :80 doit être ouvert sur le réseau local de l’adresse IP fixe 217.128.38.33 Ici, c’est le port :80 d’Apache de l’ IBM i/OS qui est ouvert (voir plus loin). /serverp/ est la directory afin de trouver la bibliothèque du programme RPG. Cette chaîne de caractères quelconque a pour fonction d’identifier la directory de façon unique. Il peut y avoir plusieurs directories par instance ouverte (voir plus loin). comhqe est le nom *pgm du programme RPG (voir plus loin). a) Demande initiale de l’utilisateur Concrètement l’utilisateur clique sur un lien à partir de son navigateur. En résumé, le lien doit faire apparaitre l’adresse IP qui identifie l’IBM i de manière unique ainsi que le port qui correspond à une instance ouverte. Si aucun port n’est indiqué, le port :80 est pris par défaut. Le lien doit également faire apparaitre la directory afin que le serveur Apache puisse trouver la bibliothèque du programme RPG *pgm ainsi que le nom du programme RPG luimême. Finalement Apache va soumettre en batch le programme RPG *pgm dans le soussystème QHTTPSVR, dans le travail dédié à CGI. b) Programme RPG en fonctionnement Le programme RPG va construire dynamiquement la page HTML. Pour cela, le programme RPG va charger en mémoire une page HTML prototype dédiée au programme. Typiquement, cette page prototype à traiter est constituée de variables de remplacement et de sections. Le rôle des procédures CGIDEV2 sera de renseigner les variables de remplacement, d’écrire les sections pour construire la page HTML et finalement ordonner au serveur Apache d’envoyer la page HTML à l’utilisateur qui en a fait la demande. Serveur Apache Page 3 Serveur APACHE principes et fonctionnement c) Page HTML reçue par le navigateur de l’utilisateur demandeur Le serveur Apache se charge d’envoyer la page HTML remplie par le programme RPG à l’aide des procédures CGIDEV2. L’utilisateur est identifié de façon unique par une adresse IP. Le navigateur va réceptionner la page HTML et procéder à l’affichage. La page sera stockée et empilée dans la mémoire du navigateur de l’utilisateur en local sur son PC. Les flèches de navigation du navigateur permettent de réafficher les pages HTML de l’historique des pages. Chaque page est autonome et contient en elle-même toutes les informations pour activer l’action suivante en fonction des choix possibles de l’utilisateur (lien URL possibles et boutons). C’est ce que l’on appelle communément « la navigation Web ». 2. L’adresse IP Il y a deux adresses IP. L’adresse IP fixe pour communiquer vers l’extérieur qui est donnée par le fournisseur d’accès et l’adresse IP qui identifie la ressource sur le réseau local: serveur, PC, Disque externe, imprimante. Pour connaitre l’adresse IP interne d’un IBM i, entrer la commande i/OS netstat puis l’option 1. Prendre l’adresse IP en face de la ligne Ethernet qui doit être active. En local, on utilisera de préférence l’adresse IP de l’IBM i alors qu’en extranet on sera obligé d’utiliser l’adresse IP fixe du réseau. 3. Division en instances du serveur Apache : Le serveur Apache est divisé en instances avec pour chacune d’elles un nom unique. Chaque instance est démarrée ou fermée unitairement. Chaque instance possède son propre fichier de configuration qui indique le port à ouvrir ainsi que la directory du programme RPG. Notons qu’il peut y avoir plusieurs directories par instance ouverte. a) Connaitre les instances disponibles du serveur Apache : Entrer la commande i/OS suivante : STRPDM puis le fichier système i/OS suivant : QUSRSYS/QATMHINSTC tous les membres. Chaque membre correspond à une instance d’Apache de même nom. A l’IPL, l’ i/OS consulte la ligne de chacun des membres un à un. Activer l’option 5 devant un membre. Examinons le contenu d’un membre, ici QUSRSYS/QATMHINSTC(CGISERVER) : -apache -d /www/cgiserver -f conf/httpd.conf –AutoStartY /www/cgiserver est le chemin de base dans l’IFS de l’instance d’Apache conf/httpd.conf est le nom du fichier de configuration que nous allons voir plus loin. Le chemin complet du fichier de configuration dans l’IFS sera donc : /www/cgiserver/conf/httpd.conf -AutoStartY signifie que l’instance d’Apache est démarrée automatiquement à l’IPL. Serveur Apache Page 4 Serveur APACHE principes et fonctionnement b) Modifier le démarrage automatique de l’instance à L’IPL Si vous ne souhaitez pas démarrer automatiquement l’instance à l’IPL changer Y en N avec la commande i/OS UPDDTA en –AutoStartN pour l’instance. 4. Le fichier de configuration httpd.conf Comme nous l’avons vu plus haut, le nom du fichier de configuration de l’instance ainsi que le chemin pour y accéder dans l’IFS sont indiqués dans le membre qui porte le nom de l’instance, à savoir le fichier système i/OS QUSRSYS/QATMHINSTC(NomInstance) a) Accéder au fichier de configuration : La commande i/OS WRKLNK ‘/www/cgiserver/conf/httpd.conf’ Permet d’accéder directement au fichier de configuration. Note : La commande i/OS : WRKLNK ‘/www/cgiserver’ permet d’accéder à la racine de l’instance. WRKLNK à la racine de l’IFS. b. Modifier le port : Listen 80 Listen indique le port. Notons que le port 80 est le port par défaut. Le port 7500 est généré automatiquement par RePeGlio lors de la création de l’instance. A l’ouverture de l’instance d’Apache, le port indiqué est ouvert. Il ne peut y avoir qu’un seul port d’ouvert par instance. Le port est donc une porte ouverte unique pour l’exécution du programme RPG. Notez que si vous changez le port, vous devez fermer l’instance puis l’ouvrir à nouveau afin que le nouveau port soit pris en compte par le serveur Apache (pour ouvrir/fermer une instance voir le menu RePeGlio ARC_OBJ/APAWRK00). Notons qu’en extranet, si le numéro de port est différent du port 80 par défaut, le port doit être ouvert vers l’extérieur également au niveau du paramétrage du boitier réseau lorsque l’adresse IP fixe est utilisée. c) Chemin pour les images : DocumentRoot /www/cgiserver/htdocs/Pictures Les documents se trouveront par défaut dans le dossier /Pictures dont le chemin est indiqué par DocumentRoot. Serveur Apache Page 5 Serveur APACHE principes et fonctionnement d) La Directory : ScriptAliasMatch /serverp/(.*) /qsys.lib/cgiserver.lib/$1.pgm Notez que la ligne de la directory est divisée en deux parties séparées par un blanc. ScriptAliasMatch indique la directory du programme RPG identifiée par un nom dans la première partie. Ici, le nom de la directory est /serverp/, le serveur Apache va soumettre le programme en interprétant la deuxième partie de la ligne. Ici, ce programme sera recherché dans la bibliothèque i/OS /qsys.lib/cgiserver/ $1 est la variable de remplacement du nom du programme RPG indiqué dans l’URL. .pgm sera ajouté par défaut à ce nom de programme conformément à la syntaxe $1.pgm IMPORTANT : Retenir que la bibliothèque de la directory de l’instance active est la seule bibliothèque utilisateur qui sera en ligne par défaut à l’exécution du programme dans le sous-système QHTTPSVR. C’est pourquoi RePeGlio gère l’équivalent d’une *libl pour la base de données. Il faut également retenir : ScriptAliasMatch script signifie que la directory est toujours relative aux programmes *pgm, jamais aux fichiers *file. AliasMatch signifie que la directory est toujours relative à un membre source d’un fichier, jamais un objet programme *pgm. Il peut y avoir plusieurs ScriptAliasMatch qui correspondent à plusieurs noms de directory. Dans ce cas, le nom de la directory est recherchée de haut en bas. La première trouvée est activée et le programme RPG *pgm appelé dans la bibliothèque de la directory. Typiquement, il peut y avoir pour une même instance une directory de test et une directory de production correspondant à deux bibliothèques différentes. e) Les autorisations dans httpd.conf : Les autorisations sont gérées par une exclusion générale puis par des exceptions successives. Il n’y a pas de niveau de sécurité comme dans l’ i/OS. En premier, il faut indiquer que toutes les directories depuis la racine sont exclues, autrement dit ne sont autorisées à rien pour l’instance active. <Directory /> Order Deny,Allow Deny From all </Directory> Donc, toutes les directories étant exclues depuis la racine, il faut accorder les autorisations pour chacune des directories nommées comme suit : <Directory /www/cgiserver/htdocs/Pictures> Order Allow,Deny Allow From all </Directory> Se rappeler : il convient d’accorder autant d’autorisations qu’il y a de directories utilisées. Serveur Apache Page 6 Serveur APACHE principes et fonctionnement f) Profil et mot de passe Apache dans RePeGlio Les profils que nous utilisons sont des objets i/OS de type *vldl avec mots de passe cryptés pour internet. Ainsi, les utilisateurs Front Office n’ont pas accès aux profils de type *usrprf du Back Office. La déclaration au niveau du fichier de configuration httpd.conf est la suivante (à la fin de httpd.conf): <LocationMatch /serverp/(.*)$> AuthName "Application" AuthType Basic PasswdFile cgiserver/MYVLDL Require valid-user </LocationMatch> Où PasswdFile indique la bibliothèque et le nom de l’objet i/OS *vldl où sont stockés les utilisateurs et mots de passe de l’instance active d’Apache, ici CGISERVER/MYVLDL. Require valid-user signifie qu’Apache contrôle l’accès utilisateur et profil qui sont requis afin d’autoriser la connexion à l’applicatif Web IBM i. Il faut retenir que l’utilisateur de type *vldl ne gère aucun objet contrairement aux profils Back-Office de type *usrprf. Se rappeler : le profil *vldl n’est là que pour autoriser l’accès lors de la première connexion à l’applicatif et ne gère rien d’autre par défaut. Note relative à la syntaxe du fichier httpd.conf : La syntaxe des ordres du fichier de configuration est structurée avec un début et une fin (markup langage). Par exemple : <LocationMatch….> …… </LocationMatch> Ou encore : <Directory….> ……. </Directory> Comme le HTML qui est un markup langage, <….> indique le début d’une structure et </…> indique la fin d’une structure. Serveur Apache Page 7 Serveur APACHE principes et fonctionnement 5. Apache géré par le Back Office i/OS Nous vous invitons à vous reporter à la brochure Paramétrage RePeGlio Web pour la mise en œuvre du serveur Apache avec le menu CALL ARC_OBJ/APAWRK00 sous QSECOFR qui permet : De créer ou d’annuler une instance d’Apache automatiquement avec la bibliothèque associée. De démarrer ou fermer une instance Nous vous rappelons quelques principes de base du serveur Apache. a) La notion de travail : A la première soumission en batch de l’instance du premier programme RPG, Apache ouvre un travail identifié par un numéro de travail unique i/OS. Ce numéro de travail peut être noté avec la commande WRKACTJOB QHTTPSVR ou encore l’option 3 du menu ARC_OBJ/APAWRK00. Pour connaitre le numéro de travail, se référer à la ligne en regard de la fonction PGM-QZSRCGI : S-syst/trav QHTTPSVR CGISERVER CGISERVER CGISERVER Utilisat Type % UC Fonction Etat QTMHHTTP BCI 0,0 PGM-QZSRHTTP SIGW QTMHHTTP BCI 0,0 PGM-QZSRHTTP DEQW QTMHHTTP BCI 0,0 PGM-QZSRCGI TIMW Notons que toutes les soumissions de travail s’effectueront à priori dans ce travail PGM-QZSRCGI Autrement dit, plusieurs programmes provenant de plusieurs utilisateurs différents partageront le même travail. Si un travail est tenu ou occupé, le serveur Apache ajoute arbitrairement un autre travail PGM-QZSRCGI. Le travail n’est en aucun cas lié à un utilisateur comme en 5250 : typiquement, une session web native est dite stateless, c'est-à-dire sans état persistant. b) La notion de *libl Par défaut, il n’y a qu’une seule bibliothèque utilisateur en ligne, celle indiquée par la directory de l’instance Apache dans le fichier de configuration /httpd.conf . RePeGlio ajoute cette notion de *libl qui est absente par défaut dans Apache afin d’accéder à la base de données IBM i. c) Droits utilisateurs *USRPRF Apache ne connait que 2 utilisateurs de type *usrprf de l’ i/OS : QTMHHTP1 QTMHHTTP Profil utilisateur CGI du serveur HTTP Profil utilisateur du serveur HTTP A retenir : si une image ne s’affiche pas, il faut accorder systématiquement les droits QTMHHTP1 et QTMHHTTP à chaque image avec l’option 9 de WRKLNK ‘/www/CGISERVER/htdocs/Pictures’. Se rappeler que les autres profils i/OS *usrprf ne sont pas reconnus par le serveur Apache mais seulement par l’ i/OS lors d’une gestion en Back-Office (avec les sessions *usrprf). Serveur Apache Page 8