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