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
En V5R30, le serveur d'origine disparaît,
et seul reste Apache. |
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 IBM i)
# 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 ZendCore)
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)
%%KERBEROS%% validation par une accrédition kerberos (Single SignOn)
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> |
Pour une authentification automatique avec kerberos, voyez EIM et ajoutez :
<Directory /www/apachedft/htdocs> Order Allow,Deny Allow From all Require valid-user PasswdFile %%KERBEROS%% AuthType Kerberos </Directory>Vérifiez ensuite que vous autorisez bien l'authentificaiton Windows intégrée (ici IE8)
![]()
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éé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 caractè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 IBM i, voyez la liste des directives :
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzas1/rzas1directivefinder.htmsur le module de réécriture httpd.apache.org/docs-2.0/misc/rewriteguide.html et sur Apache en général
Pour PHP, le produit ZendCore installait une instance APACHE tournant sous PASE , pour y accèder il fallait jouter les lignes suivantes :
LoadModule proxy_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_http_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_connect_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_ftp_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGMpuis, par exemple
ProxyPass /php http://localhost:8000/exemplesphpProxyPassReverse /php http://localhost:8000/exemplesphp
Qui demande à ce que chaque requête dont l'URL commence par php soit redirigée vers le port 8000, donc vers le serveur apache sous Pase, url exemplesphp
En 2010, pour le support de ZendServer, IBM implémente le standard FastCGI , plus simple, plus rapide et surtout ne necessiatnt plus un deuxième serveur apache.
Cette norme permet le pré-chargement d'un pgm (sur IBM i , PASE Uniquement) et le dialogue via sockets entre le serveur Apache et ce programme.
Vérifiez que vous avez les PTF suivantes (c'est intégré à la version 7)
- V5R40
SI36004 (SS1 ) et SI36026 (DG1)
- V6R10
SI36005 (SS1 ) et SI36027 (DG1)
puis, ajouter à votre serveur apache existant :
LoadModule zend_enabler_module /QSYS.LIB/QHTTPSVR.LIB/QZFAST.SRVPGM
puis
AddType application/x-httpd-php .php
AddHandler fastcgi-script .php
Dans le même temps vous devez créer un fichier fastcgi.conf dans le même répertoire que le fichier httpd.conf
contenant
- sur une seule ligne
- Server type="application/x-httpd-php"
- CommandLine="/usr/local/ZendSvr/bin/php-cgi.bin"
- StartProcesses="1"
- SetEnv="LIBPATH=/usr/local/ZendSvr/lib"
- SetEnv="PHPRC=/usr/local/ZendSvr/etc/"
- SetEnv="PHP_FCGI_CHILDREN=5
- SetEnv="PHP_FCGI_MAX_REQUESTS=0"
- ConnectionTimeout="30"
- RequestTimeout="60"
- SetEnv="CCSID=819"
- SetEnv="LANG=fr_FR"
- SetEnv="INSTALLATION_UID=20101216110903706188"
Quelques commentaires
Server type="application/x-httpd-php" la chaîne doit être la même que pour la directive AddType du fichier httpd.conf CommandLine="/usr/local/ZendSvr/bin/php-cgi.bin Coordonnées du PGM PASE à lancer StartProcesses="1" Démarrer le pgm PASE à l'avance (1 = oui) SetEnv="PHP_FCGI_CHILDREN=5 Nombre de travaux à démarrer SetEnv="CCSID=819" CCSID des fichiers .php SetEnv="LANG=fr_FR" Doit être le code langage de la langue primaire (2928 en France) SetEnv="INSTALLATION_UID=20101216110903706188" recopiez la valeur de fastcgi.conf du répertoire /www/zendsvr/conf
- sur une nouvelle ligne
- IpcDir /www/<votre-instance>/logs
indique l'endroit ou stocker le fichier error_zfcgi
- FastCGi dialogue avec PASE à l'aide de sockets IP. Si vous changez de profil avec une directive d'authentification, le nouvel utilisateur risque de manquer de droits sur le socket
Pour palier à cela, vous pouvez utiliser l'une des trois directives suivantes, sur une nouvelle ligne :
- IpcPublic *RWX pour donner tous les droits à *PUBLIC
- IpcGroup un-profil *RWX pour donner les droits du groupe
- IpcOwner un-profil *RWX pour donner tous les droits du propriétaire
Attention, il faut SI41688 (V5R4) ou SI41704 (6.1) ou SI41706 (7.1)
Depuis les versions 7.1, 7.2 vous pouvez faire tourner le serveur Apache dans un sous-système séparé (et non QHTTPSVR)
pour cela
- créez une JOBQ par CRTJOBQ HTTPJOBQ
- si vous le jugez utile créer une JOBD par CRTJOBD (sinon on utilisera QZHBHTTP de QHTTPSVR)
- si vous le jugez utile créer une classe par CRTCLS (sinon on utilisera QZHBHTTP de QHTTPSVR)
- Créez un sous système par CRTSBSD MONHTTPSVR TEXT('mon sous-système HTTP')
- soit dans un pool mémoire partageable CRTSBSD SBS(MONHTTPSVR) POOLS((1 *SHPOOL1))
- soit dans un pool mémoire dédié CRTSBSD SBS(MONHTTPSVR) POOLS((1 4096 100))
- attachez la JOBQ par ADDJOBQE
- Définissez les postes de routage par
ADDRTGE SBSD(MONHTTPSVR) SEQNBR(10) CMPVAL(HTTPWWW) PGM(QSYS/QCMD) CLS(?)
ADDRTGE SBSD(MONHTTPSVR) SEQNBR(20) CMPVAL(HTTPSVR) PGM(QSYS/QCMD) CLS(?)
- dans la config. apache, utilisez les directives suivantes
- HTTPStartJobQueue la-JOBQ
- HTTPStartJobDesc la-JOBD
- HTTPRoutingData HTTPSVR ou HTTPWWW
- HTTPSubsystemDesc MONHTTPSVR