2 votes

Redirection dans Nginx

Je suis en train de mettre en place un simple hôte virtuel pour émuler quelques réponses spécifiques qui, en production, proviendront d'une seule URL. À titre d'exemple, l'URL de production pourrait ressembler à ceci :

http://domain.com/getdeviceinfo/info.bin

Il renvoie en fait le texte dans .ini format. J'ai mis en place plusieurs fichiers de test dans mon webroot à l'adresse suivante /info/(legacy|new)/(daily|monthly)/device.htm qui testera plusieurs réponses différentes et j'aimerais mettre en place une redirection afin de pouvoir rediriger la même url vers la ressource appropriée. L'URL de test pourrait ressembler à quelque chose comme ceci :

http://devdomain.com/devicename/legacy/monthly/getdeviceinfo/info.bin

Ce que j'aimerais faire, c'est extraire les valeurs appropriées et servir (dans cet exemple)

/info/legacy/monthly/devicename.htm

Ce que Chrome, au moins, fait à la place, c'est essayer de télécharger quelque chose appelé info.bin .

Voici mon location bloc :

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  alias /opt/dev/hughesnet-modem-simulator/info/$software/$plan;
  try_files $uri $uri $device.htm
}

J'ai également essayé de définir le alias à la valeur /opt/dev/hughesnet-modem-simulator/info/$software/$device.htm à la place de try_files . Je sais que je me suis trompé dans la syntaxe, mais je ne sais pas où je me suis trompé.

Tout commentaire serait très apprécié.

Merci.

UPDATE

Mon actuel location bloc :

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  types {}
  default_type text/plain;
  alias /opt/dev/project-root/info/$software/$plan/$device.htm;
}

1voto

kolbyjack Points 7644

Le mélange d'alias avec variables avec try_files est probablement la cause de votre problème. Au lieu d'utiliser alias, utilisez simplement root :

# Including the /s in the variables makes the try_files a little more efficient
location ~ ^(?<device>/[^/]+)(?<software>/[^/]+)(?<plan>/[^/]+)/getdeviceinfo/info.bin$ {
  # Set the root to the base of all the files
  root /opt/dev/hughesnet-modem-simulator/info;

  # construct the file path to append to the root
  try_files $software$plan$device.htm =404;
}

1voto

Michael Hampton Points 232226

.bin est mis en correspondance par défaut avec le type MIME application/octet-stream C'est pourquoi le navigateur essaie de le télécharger.

Pour résoudre ce problème, remplacez le mappage du type MIME dans votre fichier location bloc :

location /.... {
    types { }
    default_type text/plain;
    # the rest of your stuff
}

0 votes

Depuis environ un jour, cela ne fonctionne plus pour moi. Il est clair que j'ai fait quelque chose, mais je ne sais pas ce que c'était. Maintenant, cependant, un fichier nommé info.bin est en cours de téléchargement (inattendu) et son contenu est celui de $device.htm (attendu). J'ai mis à jour ma question avec le bloc de localisation. Voyez-vous quelque chose que j'ai raté ? Je vous remercie.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X