Comment résoudre les besoins suivants ?
Il existe trois serveurs nginx
L'un des X est utilisé comme serveur Web
Les deux autres serveurs de pièces jointes sont A et B, chacun enregistrant des fichiers de pièces jointes différents.
A et B sont respectivement liés aux noms de domaine :
download-a.xxx.com
download-b.xxx.com
Si l'utilisateur a besoin de télécharger un fichier 123.zip après avoir visité le site Web,
Le lien de téléchargement est http://bbs.xxx.com/123.zip (notez qu'il ne s'agit pas de la véritable adresse de téléchargement)
Mais je ne sais pas sur quel serveur A ou B ce fichier 123.zip est placé.
La véritable adresse de téléchargement peut être download-a.xxx.com/123.zip ou download-b.xxx.com/123. zip
Peut-être que vous n'avez même pas ce fichier
Exigences et objectifs : étant donné que la bande passante d'exportation de A et B est limitée, les fichiers sont placés sur des machines différentes tout en utilisant efficacement la bande passante et l'espace de stockage de A et B. (Si les fichiers sur A et B sont identiques, l'équilibrage de charge est utilisé. Cela gaspillera également l'espace disque de A et B pour enregistrer le fichier à plusieurs reprises). J'espère trouver où se trouve le fichier par jugement et laisser le serveur de stockage envoyer directement le fichier au client
.Question 1 :
Si j'utilise le code php du site Web pour déterminer sur quel serveur se trouve le fichier, A ou B, puis que la page affiche la véritable adresse et que le client clique pour le télécharger directement, comment puis-je écrire le du code php ?
Question 2 :
Si la méthode ci-dessus n'est pas réalisable, un serveur nginx C peut-il être utilisé devant A et B pour traiter la requête, ce qui équivaut à un rôle de proxy inverse
Par exemple
L'utilisateur clique sur le lien de ressource http://bbs.xxx.com/123.zip sur la page pour télécharger http://bbs.xxx.com est le nom de domaine lié au serveur C. C le fait. ne stocke pas les données lui-même.
Après avoir reçu la requête, C détermine où se trouvent les données en A ou en B. Si elles sont en A, C indique directement à A qu'elles sont chez vous, et demande à A d'envoyer le fichier directement à l'utilisateur sans passer par C. Nginx peut-il répondre aux exigences ci-dessus ?
La chose la plus importante est de laisser le serveur cible renvoyer le fichier directement au navigateur de l'utilisateur. Est-il possible d'y parvenir sans utiliser le trafic et la bande passante de C ?
Vous pouvez retirer l'emplacement de stockage dans le nom du fichier, par exemple, définir le xième bit signifie qu'il est stocké sur le serveur A/B.
Jugez simplement en fonction du nom du fichier.