Bonsoir,
Avec les informations que tu nous a indiquées, j'essayerai de répondre aux questions suivantes.
Je pars du constat que: Le problème est reproduisible directement sur la machine (sans le HAProxy), cependant il peut toujours y avoir un problème de réseau.
Test 1:
#########
--> Si le problème se reproduit à l'identique depuis le localhost et depuis ton poaste local, le problème n'est pas au niveau du réseau, mais au niveau de la machine.
--> Si le problème ne se reproduit pas, c'est probablement un problème de firewall ou de proxy (mais visiblement, ce n'est pas le cas)
Test 2:
#########
Essayer de voir si c'est Apache le problème, ou plutôt le module PHP (mod_php ou PHP-FPM). Essayer de servir un fichier html et un fichier PHP, pour voir si le problème se reproduit sur le HTML
--> Si le problème existe sur les deux, le problème vient d'apache
--> Si le problème vient seulement du code PHP, le problème vient de ... PHP ^^
Test 3:
#########
Si c'est PHP, et en supposant que ce ne soit pas un problème de programmation, il faut essayer de reproduire le pb avec une page comme ci-dessous (à toi de le modifier pour qu'il corresponde à tes besoins). Après, il faut aller éplucher les logs pour voir ce qu'il se passe:
Note: Faire attention si y'a du cache PHP, ça peut être interressant de le désactiver pendant les tests, en supposant que ce ne soit pas la source du problème.
<?php
// Disable cache
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// Send a syslog message
openlog('apache2', LOG_CONS | LOG_NDELAY | LOG_PID, LOG_USER | LOG_PERROR);
syslog(LOG_NOTICE, 'Debug: Notice test message (1/3)');
syslog(LOG_INFO, 'Debug: Info test message (2/3)');
syslog(LOG_ERR, 'Debug: Error test message (3/3)');
closelog();
// Start full report
echo "<h1>SERVER: DATE</h1>";
echo "<pre>";
print_r(date("Y/m/d h:i:sa"));
echo "</pre>";
echo "<h1>HTTP: REQUEST HEADER</h1>";
echo "<pre>";
print_r(getallheaders());
echo "</pre>";
echo "<h1>HTTP: SERVER</h1>";
echo "<pre>";
print_r ($_SERVER);
echo "</pre>";
echo "<h1>HTTP: POST DATA</h1>";
echo "<pre>";
print_r($_POST);
echo "</pre>";
echo "<h1>PHP: PHPINFO</h1>";
phpinfo();
?>
Test 4:
#########
- Penser au contexte: le problème arrive tout le temps? Quand y'a de la charge? Quand y'en a pas? Pendant des backups? Pendant un check de la supervision (omg) ?
- Penser au cache PHP, si y'en a un ...
- Penser à la conf de PHP et/ou Apache
- Si tu as un pool de serveur derrière, penser à la concurrence: des modifications sur des fichiers lockées, des requetes mysql en attente, des accès concurrents, etc ...
- Faire un strace sur le process qui sert le fichier (franchement pas facile avec le mod_php, mais ça se fait, l'idée est de sortir la machine de ton pool de prod, si tu en a un, pour faire tes tests)
Test 5:
#########
En dernier recours, essayer de voir si le problème se reproduit dans un environnement neuf, et essayer de faire le diff des confs. C'est long et pas élégant, mais c'est pour ça que c'est le test 5 et qu'il y'en a pas après ^^
Et si c'est pas dans tout ce que j'ai dit, je parie une bière que c'est un problème de code, ou sous-jacent :-D On sous-estime toujours les codeurs dans l'accomplissement de leur exploits techniques, huhu (</troll>) :D
Bon courage, je serai curieux de savoir ce que c'était au final :-)