Télécharger des fichier avec Nginx et PHP (ou autre langage) et limiter la bande passante

Salut à tous.

Hier, un ami m’a demandé comment faire pour télécharger permettre le téléchargement d’un fichier en ne donnant pas directement accès au fichier à tout le monde via du code PHP (versification de l’utilisateur … etc).

L’ancienne méthode.

Je lui ai donc répondu que la méthode utilisé il y a longtemps était de lire le fichier en PHP et de le renvoyer au client (en changeant les headers au préalable) mais que cette méthode était selon moi pas propre, en effet, ça consomme beaucoup de ressource pour pas grand chose, PHP doit lire le fichier et l’envoyer au client … niveau mémoire utilisé c’est la fête.. bref ce n’est pas la bonne méthode.

Les serveurs web sont conçu pour envoyer des fichiers statiques, utilisons les pour ça !

Il est possible avec les serveurs web de leurs dire « envoie ce fichier au client » sans même que le fichier soit dans un dossier accessible par defaut. Pour ce qui est d’Apache je pense que Baptiste va en faire un billet sur son blog.

Comment fait on sous NGINX ?

Il suffit en fait d’envoyer dans l’en-tête les informations à Nginx pour que celui-ci comprenne et lance le téléchargement du fichier voulu, cet en-tête est X-Accel-Redirect.

Prenons un cas concret, le rechargement de l’ISO d’Ubuntu 14.04 en choisissant la vitesse max que le serveur attribue au client.

Il faut configurer Nginx pour l’autoriser à allez lire le contenu du dossier ou se situe les fichiers que l’on veut protéger tout en empêchant d’y accéder directement.

Notre fichier de configuration d’NGINX ressemble à ceci :

Comme vous pouvez le voir ici, rien de bien compliquer le seul changement est d’autorisé Nginx à allez lire le contenue de « /home/www/download/ISO/ »

Maintenant il suffit juste de renvoyer les headers en PHP pour dire a Nginx d’envoyer le fichier, plutôt que d’en parler longtemps un script PHP est plus explicite.

Vous pouvez voir le résultat ICI.

Ce tuto donne plus de code que d’explication car il n’y a pas grand chose à expliquer, rien de tel qu’un code pour comprendre, vous pouvez également voir la doc NGINX

Vous avez aimé cet article ? Partagez-le :)

Facebook Google Plus Twitter Linkedin email

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *