Apache / Tomcat




BoTTom

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 :

GET fichier HTTP/1.1 (ou 1.0) pour récupérer un document (suivi de deux retours chariot)
HEAD pour récupérer des informations sur un document
POST  pour transmettre des données au serveur
etc...

Voici un exemple de dialogue entre un client et le serveur WEB www.volubis.fr
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

  • la configuration est stockée dans un fichier de QUSRSYS
  • pour modifier la configuration en mode caractère, utilisez WRKHTTPCFG

HTTP Server for AS/400 (powered by Apache) : le petit nouveau

  • la configuration est stockée dans IFS (fichier httpd.conf)
  • pour éditer la configuration, utilisez la commande EDTF ( wrklnk, puis option 2)
En V5R30, le serveur d'origine disparait, et seul reste Apache.

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)



les répertoires et les fichiers créés :
  • conf: contient httpd.conf
  • logs : contient
    • acces_log :           qui vient chez vous ?
    • basic_error_log :  les problèmes rencontrés.
  • index.html : page d'accueil générée automatiquement.

détail de httpd.conf (version OS/400)

# Configuration originally created by Apache Setup Wizard Fri Jan 04 13:24:49 GMT
Listen 10.3.1.1:81
DocumentRoot /www/apache1/htdocs
DefaultType text/plain
Options None
ErrorLog logs/basic_error_log
LogLevel warn
DirectoryIndex index.html
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{User-agent}i" agent
LogFormat "%{Referer}i -> %U" referer
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log combined
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "MSIE 4\.0b2;" nokeepalive force-response-1.0
<Directory />
AllowOverride None
order deny,allow
deny from all
</Directory>
<Directory /www/apache1/htdocs>
AllowOverride None
order allow,deny
allow from all
</Directory>

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

(il faut avoir chargé le module deflate_module, voir plus haut)

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/exemplesphp

il 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 interdit

allow 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
les répertoires, sauf le répertoire htdocs (contenant vos pages) :

DocumentRoot /www/apache1/htdocs

<Directory />
AllowOverride None
order deny,allow
deny from all
</Directory>
<Directory /www/apache1/htdocs> 
AllowOverride None
order allow,deny
allow from all
</Directory>

 

la production d'index dynamiques (liste des fichiers d'un répertoire)
est interdite, sauf pour htdocs/documentation/

Options none


<Directory /www/apache1/htdocs/documentation>
Options +indexes
order allow,deny
allow from all
</Directory>

 

l'exécution de scripts CGI n'est autorisée que dans /QSYS.LIB/WWWCGI.LIB

Options none

ScriptAlias /cgi-bin/   /QSYS.LIB/WWWCGI.LIB/


<Directory /QSYS.LIB/WWWCGI.LIB/>
Options +ExecCGI
order allow,deny
allow from all
setenv QIBM_CGI_LIBRARY_LIST "FORMATION;BDVIN;QGPL;QTEMP"
</Directory>


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>
AllowOverride None
order allow,deny
allow from all
ProfileToken ON
AuthName "identifiez vous"
Authtype basic
PasswdFile %%SYSTEM%%
UserID %%CLIENT%%
require valid-user
</Directory>

 


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>
Servername web1.societe.com

  .../...(par exemple DocumentRoot /html/web1 )

</VirtualHost>

<VirtualHost 10.10.10.10>
Servername web2.societe.com

  .../...(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:

  1. JSP pour vos pages html et vos pages JSP.
  2. /WEB-INF pour votre fichierweb.xml de définition des servlets.
  3. /WEB-INF/classes pour vos classes JAVA.
  4. /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.jar

la 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é automatiquement

Puis 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 :

  • 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

Top


Copyright © 1995,2013 VOLUBIS