Performance désastreuse de mod_rewrite dans .htaccess

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Performance désastreuse de mod_rewrite dans .htaccess

par fred_phpf » 22 juin 2006, 17:45

oui le serveur est en prod, connais tu les différents niveau de log et ce qu'ils indiquent ?

sinon, les regles de réécritures ou le fichier de conf d'apache te semble correct ? ... c'est bizarre quand même non ?

par Ripat » 22 juin 2006, 17:14

Ton serveur est en production?

Si c'est le cas, diminue le level, fais tes essais de rewrite et remets level 0 (pas de log).

Tu auras alors le temps de vérifier les log à ton aise pour voir ce qui cloche.

par fred_phpf » 22 juin 2006, 16:31

ça va pas le faire, le log grossi de 5MB a chaque secondes !!

par Ripat » 22 juin 2006, 16:03

Dans httpd.conf ou ce qui tient lieu de fichier de config du serveur Apache

par fred_phpf » 22 juin 2006, 15:58

ou doit il être activé ?

par Ripat » 22 juin 2006, 11:53

As-tu activé le rewrite.log?

Sinon, fais le et mets le en level 9 pour deboguer.

Code : Tout sélectionner

RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 9

par fred_phpf » 22 juin 2006, 11:47

quelqu'un a une idée ? :)

par fred_phpf » 20 juin 2006, 20:03

Bonjour,

ayant lu un sujet à peu près similaire, j'ai fait une recherche et suis tombé (merci Google) sur cet excellent test et qui fini de me convaincre d'intégrer mes regles de réécriture dans le fichier de conf d'apache.

malheureusement, je n'y suis pas parvenu, je viens donc solliciter votre aide, afin de savoir ce qui ne va pas :)

La config:
Un dédié hébergé chez SIVIT (toiut comme PHPFrance ;-) )
PHP Version 4.3.10-2
Apache 1.3.33

.htaccess

Code : Tout sélectionner

ErrorDocument 404 /modules/erreurs/index.php?error=404 RedirectPermanent index.html http://www.domaine.tld/modules/news/ RedirectPermanent /modules/xgallery/ http://www.domaine.tld/modules/gallery/ RewriteCond %{HTTP_HOST} ^domaine.tld$ RewriteRule ^(.*) http://www.domaine.tld/$1 [QSA,L,R=301] RewriteEngine on #Menu RewriteRule ^forum.html$ modules/newbb/ [L]
Ci-dessus les premières lignes de mon .htaccess ... les regles fonctionnent bien entendu, toutefois à y regarder de
plus près, je ne suis pas sur que l'instruction "RewriteEngine on" soit à sa bonne place ... bref

Pour faire simple, j'ai inséré, une simple regle dans le virtualhost de httpd.conf, cela donne:

Code : Tout sélectionner

<VirtualHost 194.146.xxx.xxx> DocumentRoot /home/public_html/ ServerName www.domaine.tld ServerAlias *.[url=http://www.phpfrance.com/hebergement/click.php?id=3]sdxxx.sivit.org[/url] DirectoryIndex index.php index.html ServerAdmin [email protected] RewriteEngine on RewriteRule ^forum.html$ modules/newbb/ [L] </VirtualHost>
Je commente ma regle dans .htaccess, puis redemarre Apache ... nada, ça ne fonctionne pas.

qu'est-ce qui cloche d'après vous ?

merci de votre aide

Frederic

par Hubert Roksor » 05 avr. 2006, 21:37

Dans ton httpd.conf, tu peux toujours faire un include d'un fichier qui ne contiendra que tes rules
C'est une p***** d'idée de génie ça, je m'en veux de ne pas y avoir pensé :lol:
Comme ça je pourrais écraser le fichier include sans remords. D'un point de vue purement théorique ça permettrait à un admin qui possèderait plusieurs serveurs de placer l'include dans un dossier NFS. Resterait à faire redémarrer Apache sur chaque serveur un par un, mais ça permettrait de centraliser plus facilement la config.

par Ripat » 05 avr. 2006, 21:23

Oui, malheureusement cette RewriteRule est générée par PHP et risque d'être assez dynamique (probablement quotidienne, je ne sais pas encore) et j'ai un peu peur de modifier httpd.conf automatiquement. Enfin, je verrai bien... (il doit être possible d'utiliser Apache pour parser le httpd.conf modifié et ne remplacer l'original que si le nouveau est valide, pas encore réfléchi à ça ;))
Dans ton httpd.conf, tu peux toujours faire un include d'un fichier qui ne contiendra que tes rules. Celui-ci sera plus facile à parser et tu ne risques pas de modifier autre chose :wink:

Pour réactiver les nouvelles directives sans perturber les connexions existantes faire un graceful restart (Sous Linux - Je crains que le graceful ne soit pas possible sous windows).

par Hubert Roksor » 04 avr. 2006, 16:53

Oui, malheureusement cette RewriteRule est générée par PHP et risque d'être assez dynamique (probablement quotidienne, je ne sais pas encore) et j'ai un peu peur de modifier httpd.conf automatiquement. Enfin, je verrai bien... (il doit être possible d'utiliser Apache pour parser le httpd.conf modifié et ne remplacer l'original que si le nouveau est valide, pas encore réfléchi à ça ;))

Merci d'avoir testé sur ta machine, ça confirme mes doutes sur l'éventuel bug quelque part sous Windows (ou juste sur ma machine, qui sait?). Quelque part ça me rassure un peu, merci ;)

Mon thread chez Développez est toujours vide, apparament "qualité > quantité" est toujours TRUE :roll:

par Ripat » 04 avr. 2006, 08:31

Pour info, j'ai fait le test sur mon serveur de dvp (Linux-Apache2-Pentium4-768Mb de mem)

(rewrite de foo vers bar.html)

Code : Tout sélectionner

htaccess foo-->bar 2400[#/sec] bar 4000[#/sec] httpd.conf foo-->bar 2700[#/sec] bar 5500[#/sec]
Ces résultats me semblent assez logiques: la rewrite rule dans httpd.conf est un peu plus rapide que dans un .htaccess et l'accès direct à la page deux fois plus rapide dans les deux cas.

par Ripat » 04 avr. 2006, 07:43

Je suppose que tu as déjà lu ceci:
http://httpd.apache.org/docs/2.0/howto/ ... .html#when

Sauf si tu modifies dynamiquement tes rewrite rules, il vaut mieux les mettre dans le fichier de config du serveur. Et encore, il doit être possible de le faire également de manière dynamique en "reloadant" ce fichier de config sans arrêter le serveur.

Performance désastreuse de mod_rewrite dans .htaccess

par Hubert Roksor » 04 avr. 2006, 01:40

J'ai posté ce topic chez Développez @ http://www.developpez.net/forums/viewtopic.php?t=482035 parce qu'ils ont une section Apache avec peut-être plus de passage qu'ici

Je suis en train de tester certaines choses avec mod_rewrite, et je me suis aperçu qu'en mettant les règles dans un .htaccess les pages étaient beaucoup plus lentes qu'en les mettant dans httpd.conf. Les stats sont dans l'autre topic, mais pour vous donner un ordre d'idée:
  • page html - 1300 pages/s,
  • page PHP 5.1.2 sans opcode cache - 500 pages/s (un simple readfile()),
  • RewriteRule dans httpd.conf - 1000 pages/s
  • RewriteRule dans .htaccess - 50 pages/s (cinquante, vous avez bien lu)
Comme vous pouvez le voir, en utilisant le chemin absolu vers le fichiers dans le RewriteRule dans le httpd.conf on obtient de très bons résultats. Malheureusement il semble impossible de faire de même avec un .htacces... :?

Si quelqu'un a une idée... merci ;)