mod_rewrite et log d'utilisateur

Nouveau WRInaute
Salut !
J'utilise mod_rewrite d'apache (sous unix) pour gerer les vhosts de mes utilisateurs (users1.domain.com user2.domain.com ...) je les gere avec un fichier dummy.vhost dans lequel je met :
Code:
user1.domain.com      /home/user1
user2.domain.com      /home/user2
ca marche impecable jusqu'au moment j'ai eu des demandes pour offrir des statistiques pour quelques utilisateurs ,j'utilise webalizer mais c'est pas ca le probleme ,j'ai revisé la doc de mod_rewrite ,on ne peut pas offrir un fichier log par vhost pour que les analyseurs de logs (les scripts de stats) analysent ce fichier et donnent des stats spécifiques à un seul utilisateur ,je sais qu'en utilisant la directive VirtualHost ca m'offrira un fichier log par utilisateur ,mais avec cette methode j'aurais a editer le httpd.conf et redemarrer apache à chaque fois qu'un utilisateur s'inscrit ,et avec plusque 300 utilisateurs inscrits mon httpd.conf aura une taille gigantesque qui bouffera toute la ram...
voila si vous avez une solution pour moi ,je vous remercie.
 
Nouveau WRInaute
voila pour plus d'explication :

Voila les lignes inserées dans mon httpd.conf (Apache2 unix)
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/usr/local/httpd/conf/dummy.vhost
RewriteLog /usr/local/httpd/logs/rewrite.log
RewriteLogLevel 1
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond %{REQUEST_URI} !^/error/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/

#RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
#RewriteCond ${vhost:%1} ^(/.*)$
#RewriteRule ^/(.*)$ %1/$1


voila mon fichier map des vhosts
# cat /usr/local/httpd/conf/dummy.vhost
nas.hexahost.com /home/nas/www
nuk.hexahost.com /home/nuk/www

et voila le fichier log de sortie ,il n'est pas traitable par webalizer ou autre ,ces lignes sont le resultat d'une seule requete sur le serveur qui normalement donne une seule ligne sur le log ,mais voila ce que ca donne :
# cat /usr/local/httpd/logs/rewrite.log
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#815daa8/initial] (1) go-ahead with /home/nas/www/ [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#8166ac0/subreq] (1) go-ahead with /home/nas/www/index.php [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#8168ac8/subreq] (1) go-ahead with /home/nas/www/index.htm [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#8166ac0/subreq] (1) go-ahead with /home/nas/www/index.html [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#8168ac8/subreq] (1) go-ahead with /home/nas/www/index.html.var [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#8166ac0/subreq] (1) go-ahead with /home/nas/www/HEADER.html [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#816db10/subreq] (1) pass through /cgi-bin/index.php
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#816db10/subreq] (1) pass through /cgi-bin/index.htm
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#816db10/subreq] (1) pass through /cgi-bin/index.html
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#816db10/subreq] (1) pass through /cgi-bin/index.html.var
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#816db10/subreq] (1) go-ahead with /home/nas/www/README.html [OK]
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#815daa8/initial] (1) pass through /icons/blank.gif
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#815daa8/initial] (1) pass through /icons/folder.gif
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] [nas.hexahost.com/sid#809b5f0][rid#815daa8/initial] (1) pass through /icons/unknown.gif

merci pour votre aide
 
WRInaute discret
et ben moi, je ferai un grep toutes les nuits sur le access.log, enfin, si l'info est bien dans le fichier access.log
genre

cat /var/log/apache/access.log | grep user1.domain.com > access_user1.log
 
Nouveau WRInaute
salut !
merci pour votre rapide reponse :)
voila une ligne de mon access_log :
127.0.0.1 - - [23/Mar/2004:22:08:39 +0100] "GET /icons/unknown.gif HTTP/1.1" 304 -

il n'y a pas de vhost dedans ,comment faire dans mon cas ?
voila ce que je met dans mon httpd.conf pour les logs :
ErrorLog logs/error_log

LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# You need to enable mod_logio.c to use %I and %O
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

CustomLog logs/access_log common
 
Nouveau WRInaute
salut !
ysimon cette solution va ralentir mon serveur si mon access_log est grand en taille et que j'ai plusieurs utilisateurs à extraire de ce log...
 
WRInaute discret
Je crois qu'on peut ajouter "%v" en premier paramètre dans le LogFormat, ça y met le nom du virtual host, par exemple:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Ensuite tu peux utiliser la directive de ysimon, ou bien utiliser split-logfile qui est prévu pour découper tes logs en 1 fichier par virtual host.
 
Discussions similaires
Haut