Je viens vous voir ici car je suis complètement perdu par rapport à un problème que je n’ai jamais rencontré.
J’ai un serveur web (NGINX) utilisant PHP5.6 sur une Debian 9 avec un site Internet forcément dessus.
J’ai une section « adhérents » dessus où mon entreprise met à disposition des fichiers de toutes sortes, Excel, images, PDF, etc. Et ils peuvent donc les télécharger pour les consulter.
Cette installation est toute fraîche puisque j’ai changé de serveur, j’étais en Debian 7 avec toujours NGINX et PHP5.6.
Depuis la mise en place sur ce nouveau serveur, TOUS mes fichiers téléchargés sont corrompus !
J’ai essayé tellement de choses… Passer sur Apache, mettre PHP7, retiré le certificat SSL, jouer sur les paramètres de compression gzip/deflate etc. Rien n’y fait.
Je remarque également que mes fichiers perdent leurs propriétés. Lors d’un clic droit puis propriétés, puis détails, n’apparaissent plus : auteurs, dernier enregistrement, nom du programme, entreprise etc.
Je dois préciser que le fait de récupérer le fichier directement avec du SFTP par exemple fonctionne très bien et il n’a pas perdu les infos (metatags je crois) et s’ouvre très bien.
Hormis ceci mon site fonctionne très bien.
Les deux fichiers font exactement la même taille.
Déjà ce n’est pas une configuration « normale », la version de PHP fournie par Debian 9 est la 7.0.
Si je comprends bien les fichiers sont corrompus uniquement lorsqu’ils ont téléchargés via l’interface web. Il faut donc voir le code du site qui permet ce téléchargement et surtout examiner les logs du site au moment où un fichier est téléchargé.
Quel est le poids de ces fichiers ?
Comment est réglée la directive client_max_body-size de nginx ?
Par conte ce qui précède semble indiquer un problème de configuration TLS, mais je ne sais pas d’où cela vient. Il faudrait pouvoir examiner toute la configuration.
Mais déjà bien vérifier que le client que tu utilises sait gérer TLS 1.2. Le mieux étant de vérifier depuis une Debian 10
Merci pour tes réponses.
Oui je trouve curieux aussi cette ligne End of file… Je ne m’y connais pas assez, j’ai posé mes questions aussi sur le forum Let’s Encrypt.
Je n’ai pas de Proxy. De plus je suis repassé sous Apache2. J’ai même désactivé mon pare-feu en frontal (pfSense) pour éliminer cet éventuel paramètre.
Voici la partie SSL de mon virtualhost :
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/XXXX.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/XXXX.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/XXXX.com/chain.pem
SSLProtocol all -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCipherSuite #ECDHE-RSA-AES128-GCM-....................
#Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Debian 10 sous-entend refaire tout depuis le début Mais s’il le faut… Je vais passer un bon weekend
Dans la capture d’écran on reconnaît des éléments d’un fichier OpenDocument (ou peut-être MS Office) : archive pkzip contenant des fichiers XML.
Tu as comparé le contenu binaire des fichiers originels et téléchargés pour voir ce qui est modifié ? Est-ce une troncature, une insertion, une altération partielle ou totale ?
Que donne le transfert d’un fichier de texte brut (.txt) ? Les différences devraient être faciles à visualiser.
Merci pour ta réponse, j’arrive un peu tard. C’est bien des fichiers Excel.
Je viens de faire un essai avec un document XML tout simple. Surprise le fichier s’ouvre bien mais j’ai une ligne de plus au début du fichier ?! C’est très étrange. Je ne m’attendais pas à ça. Si j’affiche tous les caractères je vois que c’est un « LF »
Je viens de refaire un essai avec un fichier TXT tout bête et pareil, il m’ajoute un « LF » en début de fichier.
Un « linefeed » inséré au tout début d’un fichier téléchargé via du PHP, cela vient d’un fichier PHP qui a été édité et qui s’est retrouvé avec un « linefeed » (ou tout autre caractère) devant la balise <?php .
C’est juste une mauvaise manipulation, pas un bug.
Je ne comprends pas, c’est bien PHP ou autre peu importe qui prépare le téléchargement du fichier lorsqu’on clique sur un lien… Et envoie les headers et tout ce qui va bien.
Dans ton cas oui, mais pas forcément dans le cas général. Si le téléchargement se fait en cliquant sur un lien direct vers l’URL de la ressource, ça ne passe pas par du PHP, même si ce lien se trouve dans une page dont le contenu a été généré par du PHP. C’est le serveur HTTP lui-même qui envoie les headers et le contenu.