Protocole HTTP :
Le protocole HTTP, est le protocole utilisé par les serveurs WEB, pour dialoguer avec les navigateurs.
Le client se connecte, puis utilise une méthode :telnet www.volubis.fr 80 Trying 192.168.67.200... Connected to www.volubis.fr. Escape character is '^]'. GET /index.html HTTP/1.1 Host: www.volubis.fr HTTP/1.1 200 OK Date: Tue, 03 Jan 2006 08:04:14 GMT Server: Apache/2.0.52 Last-Modified: Fri, 16 Dec 2005 15:33:13 GMT ETag: "17c3-e1c-eb594040" Accept-Ranges: bytes Content-Length: 3612 Connection: close Content-Type: text/html; charset=ISO-8859-1 <html> <head> <title><title>mon titre</title> </head> <body> ma premiere page </body> </html> |
Le serveur WEB le plus connu et le plus utilisé est APACHE.
Apache est disponible
sur AS/400 depuis la V4R50 via une GROUP PTF, la SF99035
(en V5r10, pour être au dernier niveau, commandez la SF99156)
En V5R10, vous avez donc le choix , de fait, entre deux
serveurs WEB.
HTTP Server for AS/400 (original) : celui de la version 3.7
HTTP Server for AS/400 (powered by Apache) : le petit nouveau
Avec Zend Core, produit installant un moteur PHP sur system i (V5R30 et suivantes), un deuxième serveur apache d'origine UNIX et fontionnant sous PASE, est installé par ce produit. |
Au passage l'administration graphique du(des) serveur(s) WEB a
été revue et intègre parfaitement ces
nouveautés.
(il s'agit du serveur *ADMIN, accessible sur le port 2001)
pour créer votre premier serveur Apache, suivez le guide:
tapez comme url "http://votreas400:2001/HTTPAdmin",
et dans le menu de gauche, choisissez
(Create HTTP server)
On vous propose le choix du type de serveur
puis un nom de serveur
Ensuite, indiquez s'il s'agit d'une conversion (d'un serveur
d'origine), auquel cas une migration vous sera proposée.
Puis le répertoire principal, par défaut /www/lenomdevotreserveur.
s'il y a déja une configuration existante dans ce
répertoire (suite à une suppression) vous devez confirmer
le remplacement :
puis vous indiquerez le répertoire principal de votre site (par défaut htdocs dans le même répertoire).
et indiquez ici, si le serveur est à l'écoute sur
toutes les adresses IP ou un seule
(multihoming ou plus d'une carte
LAN)
et le n° de port d'écoute (il doit y avoir unicité
sur le couple adresse/port)
ainsi que le format des logs produites (qui accède, depuis
quel poste, quel navigateur ?)
Combined, stocke des informations variées comme le demandeur,
l'url, date/heure, etc...
et vous avez terminé votre première configuration !
vous pouvez maintenant affiner votre configuration en choisissant "Configuration" et le nom de votre serveur dans la liste déroulante.
(version
5.10)
![]() |
|
détail de httpd.conf (version OS/400)
# Configuration originally created by Apache Setup Wizard Fri Jan 04 13:24:49 GMT |
Directives :
Listen 10.3.1.1:81 : adresse et port d'écoute
DocumentRoot /www/apache1/htdocs : localisation des pages html
DirectoryIndex index.html : définition de la (ou des ) page(s) d'accueil
LoadModule, chargement d'un module externe (sous OS/400, un programme de service)par exemple :
LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM (module de
compression)
LoadModule jk_module /QSYS.LIB/QHTTPSVR.LIB/QZTCJK.SRVPGM (Connecteur Tomcat)
LoadModule php5_module /usr/local/Zend/Core/modules/apache2/libphp5.so (module
PHP sous Zend/Unix)
Sous Windows utilisez un chemin relatif (par exemple pour charger SSL)
LoadModule ssl_module modules/mod_ssl.so
ErrorLog logs/basic_error_log : localisation des historiques d'erreur
LogFormat et CustumLog : format et localisation des historiques de consultation
BrowserMatch , identification des navigateurs (sur une
chaîne descriptive fournie par ce dernier)
cette directive permet de demander :
a/ à renseigner une (ou des) variable(s) d' environnement (variable=valeur).
b/ à utiliser certaines options spécifiques pour ce navigateur (NokeepAlive)
Options
ExecCGI, scripts CGI autorisés.
FollowSymLinks, autorise le serveur à suivre les liens symboliques dans IFS (résultat de la cde système ADDLNK)
SymLinksIfOwnerMatch, suivre les liens symboliques, si le propriétaire du lien est aussi le propriétaire de l'original.
Includes, autorise SSI ("include" ou copies de fichiers réalisées par le serveur à la volée)
IncludesNOEXEC, autorise SSI sauf dans le scripts CGI.
Indexes, autorise le serveur à produire une liste des documents d'un répertoire même s'il ne contient pas de fichier tel que définit dans DirectoryIndex (par défaut index.html)
Multiviews, autorise les documents à "contenu négocié", à l'affichage.
Il s'agit :
a/ de fichiers images, notés sans extensions, et le serveur envoi la plus petite des images trouvées et supportée par le navigateur (.gif ou .jpg)
b/ de fichiers texte dont l'extension présente la langue, le lien est noté toujours sans extension
(<A href="nom-du-fichier"...) et le fichier sera choisi selon la langue du navigateur
(.fr en français, .en en anglais, ...), par défaut cela n'est admis que pour les type mime connus
AddType, permet d'ajouter un type mime en précisant l'extension le caractérisant :
AddType application/x-httpd-php .php
Action, permet d'indiquer une action à entreprendre face à un type mime particulier
Action application/x-httpd-php /php-bin/php
(il faudra quand même avoir un ScriptAlias sur le répertoire /php-bin)
AddOutputFilterByType permet de demander un filtre de sortie (compression) par type MIME
AddOutputFilterByType
DEFLATE text/html
SetOutPutFilter DEFLATE
(il faut avoir chargé le module deflate_module, voir plus haut)
AddOutputFilter permet de demander un filtre de sortie (compression) par extension de fichier
AddOutputFilter DEFLATE
.htm
SetOutPutFilter DEFLATE
Alias, permet de masquer la localisation réelle d'un ensemble de fichiers,en fournissant d'abord le nom d'un répertoire "virtuel", puis le nom du répertoire réel à utiliser (permet de masquer l'emplacement réel, mais aussi de "sortir" du répertoire indiqué par documentroot)
Alias /images/ /html/images/
ScriptAlias, idem, pour les programmes CGI, par exemple :
ScriptAlias /cgi-bin/netdata/ /qsys.lib/cgi.lib/db2www.pgm/
ScriptAlias /php-bin/ /QOpenSys/php/bin/
Redirect, redirige la demande vers une autre URL en
précisant un code erreur HTTP
(le navigateur recoit le code http et la nouvelle URL et se redirige
alors vers cette dernière)
301 : Move permanently 302 : Move temporarily 410 : Gone (la nouvelle url ne doit pas être précisée)
Redirect 302 /as400 http://www.iseries.com/as400
Redirect 301 /unix http://www.linux.fr
ProxyPass / ProxyPassReverse, le serveur Apache interroge pour
vous un autre serveur, récupère la réponse et la fournit
au client d'origine (proxy inversé),
Utilisé avec ZendCore, de facon à rediriger les requêtes
vers le serveur Apache d'unix (sur le port 8000)
ProxyPass /php http://localhost:8000/exemplesphp
ProxyPassReverse /php http://localhost:8000/exemplesphpil faut impérativement avoir chargé le module correspondat par
LoadModule proxy_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_http_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
<Directory> </Directory>, il s'agit d'un bloc donnant des droits et des options pour un répertoire uniquement.
vous devez placer vos directives entre <directory> et </directory> afin qu'elles ne portent que sur UN répertoire précis,
particulièrement :Options (vu plus haut)
ATTENTION :
Option +ExecCGI, ajoute le droit de lancer des scripts
Option ExecCGI, donne le droit de lancer des scripts, mais RETIRE les autres options (annule et remplace)
Vous pouvez aussi utiliser les options avec le signe "-".order, qui détermine vos priorités
allow,deny: tout ce qui n'est interdit est autorisé
deny,allow : tout ce qui n'est pas autorisé est interditallow from , indiquez all ou une adresse ip ou un début d'adresse, pour autoriser un répertoire à certains postes.
deny from, identique à allow (sur le plan de la syntaxe), indique les postes NON autorisés.
setenv , mise en place d'une variable d'environnement spécifique, particulièrement utilise pour CGI en fixant la variable d'environnement QIBM_CGI_LIBRARY_LIST.
sur le même mode, vous trouverez
<Files> </Files> liste des directives liées à un fichier
<Location> </Location> liste des directives
liées à une URL et non une localisation (avant réécriture,
par ScriptAlias par ex.)
Exemples :
Pour des raisons de sécurité, on vous propose d'interdir par défaut tous <Directory /www/apache1/htdocs> |
la production d'index dynamiques (liste des fichiers d'un répertoire) |
l'exécution de scripts CGI n'est autorisée que dans /QSYS.LIB/WWWCGI.LIB |
Protection de répertoires (authentification)
ProfileToken ON, pour autoriser les authentifications
Authname, founit le titre de la fenêtre d'authentification (on parle aussi de REALM )
Si vous protégez un répertoire avec une directive d'authentification et que le navigateur demande une autre page du même site avec le même realm, il ne doit pas redemander la saisie du mot de passe, mais envoyer celui qu'il a gardé en mémoire (jusqu'à la fermeture du navigateur).
Authtype basic, authentification basique (cryptage du mot de passe)
PasswdFile, où vérifier ?
%%SYSTEM%% : vérification réalisée avec la base des utilisateurs OS/400 (objets *USRPRF)
bib/malvld : vérification réalisée avec des utilisateurs enregistrés dans une liste de validation (CRTVLDL) et ajoutés soit par API, soit depuis l'administration graphique du serveur WEB (ils sont inconnus du monde 5250, par exemple)
UserId , profil à utiliser sur le 400 après authentification (un nom ou %%CLIENT%%)
Require, liste des utilisateurs ou des groupes
autorisés à accèder à un répertoire.
"valid-user" signifie tout utilisateur préalablement authentifié
exemple : On doit s'authentifier avec un profil OS/400, le JOB bascule sous le profil saisi..
Alias /secret /www/apache1/htdocs/prive <Directory /www/apache1/htdocs/prive> |
VirtualHost : hôtes virtuels.
Il s'agit ici, sur le même modèle que <directory>
</directory>, de dédier des directives à un site
WEB particulier .
ATTENTION, il faut que le client soit compatible HTTP1.1 pour
transmettre l'URL et non l'adresse IP.
(Netscape 2.0 n'est pas compatible, MOSAIC non plus, mais ils sont
dépassés)
imaginons que vous ayez à construire deux serveurs WEB (web1.societe.com
et web2.societe.com)
mais en ne possédant qu'une seule adresse IP, par exemple
10.10.10.10.
vous écrivez
NameVirtualHost 10.10.10.10 <VirtualHost 10.10.10.10> .../...(par exemple DocumentRoot /html/web1 ) </VirtualHost> <VirtualHost 10.10.10.10> .../...(par exemple DocumentRoot /html/web2 ) </VirtualHost> |
tout ce qui se trouve dans le premier pavé n'est
considéré que si l'URL demandée commence par http://web1.societe.com,
à l'identique pour le deuxième. Attention, toute demande
portant sur un nom de serveur non reconnu, sera assimilé au
premier serveur.
la plupart des directives peuvent être placées dans un hôte virtuel.
Directives spécifiques
ModeRewrite ON
il s'agit d'un module permettant de récécrire tout ou partie de l'URL en utilisant les métacaractères du monde Unix:
. n'importe quel caractère.
* n'importe quel nombre d'occurrences du motif précédent
a* : signifie n'importe quel nombre de fois "a" (0 compris)
.* : signifie n'importe quel nombre de n'importe quel caractère.
+ une occurrence ou plus du motif précédent
? zéro ou une occurrence du motif précédent
| reconnait soit le motif situé à gauche de | , soit celui situé à droite.
( ) sauvegarde le motif situé entre ( et ), il sera réutilisé dans la partie réécrite sous forme $1,$2, etc...(dans l'ordre rencontré)
^ si c'est en début de ligne
$ si c'est en fin de ligne
\ déspécialise le caractère suivant (ainsi \* , veut dire le caractère "*")
[ ] un des caractères entre crochet, peut être noté [0123456789] ou bien [0-9] (identiques)
[^ ] tout cacarctère SAUF ceux entre crochet (négation de la ligne précédente)
Les Directives suivantes acceptent le mode réécriture:
AliasMatch, ScriptAliasMatch, BrowserMatch, BrowserMatchNoCase,
Directorymatch, FIlesMatch, LocationMatch, Redirectmatch.ainsi
ScriptAliasMatch ^/cgi-bin/(.*) /QSYS.LIB/MABIB.LIB/$1.PGM , remplace
www.monsite.com/cgi-bin/toto par /QSYS.LIB/MABIB.LIB/TOTO.PGM et exécute le pgm.
et
RedirectMatch 302 (.*)\.php$ http://autreserveur.com/php/$1.php, récrit l'url
www.monsite.com/toto.php en http://autreserveur.com/php/toto.php et indique une redirection au navigateur.
enfin, RewriteRule (il faut RewriteEngine On), permet de réécrire l'URL AVANT son traitement par les autres directives.
Pour plus de détail sur les directives de configuration d'apache sur iseries :
publib.boulder.ibm.com/pubs/html/iseries_http/v5r1/index.htm?info/rzaie/rzaiedirective.htm
sur le module de réécriture httpd.apache.org/docs-2.0/misc/rewriteguide.html et sur Apache en général
TOMCAT (c'est le moteur de servlet d'Apache, plus légers que W.A.S)
Attention, depuis la V6R10, seule la version open source est utilisable.le moteur de servlet peut s'éxécuter sous forme "inprocess" ou intégré au serveur Apache (on utilise alors JNI ou Java Native Interface) ou bien "outprocess", vous trouverez alors d'un job à part (dans QSYSWRK) dialoguant avec votre serveur web (sur une autre machine ?) via sockets IP.
1/ regardons d'abord comment configurer un serveur "inprocess" (en utilisant toujours la configuration sur le port 2001)
choisissez ensuite
le plus simple, la première fois, est de suivre l'assistant (wizard) :
![]()
On vous indique que si des fichiers existent déja, il seront reconfigurés
(à utiliser uniquement la première fois donc)
ici, vous devez choisir
la configuration de servlets ou de pages JSP autonomes
(que vous devrez placer dans les bons répertoires "à la main")l'utilisation de fichiers archives ou .war (c'est la même logiques que les archives java .jar)
Point suivant, servlets (classes java) ou pages JSP (pages "html" utilisant des classes externes)
le magicien a configuré pour vous un répertoire webapps/app1, qui sera automatiquement considéré comme un alias par le serveur web (directive JKmount ... inprocess, dans httpd.conf) contenant deux sous répertoires:
- JSP pour vos pages html et vos pages JSP.
- /WEB-INF pour votre fichierweb.xml de définition des servlets.
- /WEB-INF/classes pour vos classes JAVA.
- /WEB-INF/lib pour vos fichiers archives.
ici, nous testons une page jsp (essayez example/calc [servlet] et example/snoop.jsp [page jsp] .)
Si vous choisissez de revenir sur une configuration existante
(ASF Tomcat settings), vous verrez, l'option générale de support des servlets
vos alias (JKMount),
c'est à dire les chaînes de caractère dans l'URL qui font que Apache passe la main à TOMCAT
les chemins de recherche des classes
![]()
c'est ici que vous ajouterez JDBC : /QIBM/ProdData/HTTP/Public/jt400/jt400.jarla définition des applications , stockée dans www/votre-serveur/conf/serveur.xml
(le bouton configure correspond à l'édition du fichier web.xml dans le répertoire de l'application)
cliquez sur le bouton radio pour éditer un context (une application)
indiquez ici :
Le bouton Configure, permet de paramétrer la liste des
classes utilisables :
Avec WDS client et particulièrement pour WebFacing, vous devez Exporter plutôt votre projet au format WAR:
Exportez dans /webapps, directement,
un répertoire de même nom sera créé et le fichier WAR sera décompatcté automatiquementPuis configurez sous le même nom :
2/ puis voyons maintenant comment installer la version open source en mode outprocess
Pour utiliser TOMCAT 5, 6 et suivantes , il faut installer la version Open Source
par exemple http://apache.multidist.com/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip qu'il faut dézipper et placer dans l'IFS
( pour Windows http://apache.multidist.com/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.exe )
Sous windows TOMCAT s'installe en tant que service
sur IBm i il faut le lancer par
SBMJOB CMD( QSH CMD('/apache-tomcat-votre-version/bin/startup.sh') ) JOB(TOMCAT) JOBQ(QSYSNOMAX)
Pour arreter lancer shutdown.sh, sur le même mode
Vérifier par NETSTAT *CNN, la présence ou non des ports 8009 et 8080
Pour intégrer Tomcat à Apache, il vous faut :
fixer la variable d'environnement JAVA_HOME
par ADDENVAR JAVA_HOME VALUE('/Qopensys/QIBM/ProdData/JavaVM/jdkVersion-java/32-ou-64bit) LEVEL(*SYS)
le connecteur adéquat
• mod_jk.so sous windows (il faudra renommer le fichier et le placer dans le répertoire modules)
• QZTCJK dans QHTTPSVR (V5R40, avant allez chercher ce *SRVPGM )
- Créer un fichier workers.properties dans le répertoire conf, contentenant
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
- Modifier le fichier httpd.conf
en ajoutant
LoadModule jk_module /QSYS.LIB/QHTTPSVR.LIB/QZTCJK.SRVPGM , pour I5
LoadModule jk_module modules/mod_jk.so, sous Windows
JkWorkersFile /www/<instance>/conf/workers.properties (conf/workers.properties sous Windows)
JkLogFile /www/<instance>/logs/jk.log (logs/jk.log sous Windows)
JkLogLevel Error (Info pour avoir une trace détaillée)
Ajoutez JkMount /examples/* worker1, si vous voulez tester,
puis testez sur l'URL http://<votre serveur>/examples/ cela correspond à des servlets et pages JSP intégrées à Tomcat.
- Ensuite les applications sont encore une fois dans webapps, il suffit de placer le fichier .war dans ce répertoire
et de redémarrer TOMCAT pour que l'application soit déployée.
Attention, pour chaque application, il faut modifier la config d'apache (httpd.conf) et ajouter "à la main"
JkMount /test/* worker1 (si votre application se nomme test)
Voyez cette page sur developerworks, actualisée en 2013 pour les versions 7.1 et 6.1