1 votes

Puis-je rediriger ou accéder par proxy à **/ vers **/index.html en même temps qu'une route proxy_pass ?

J'ai le domaine suivant pointé vers mon serveur nginx my.web.server

Je voudrais rediriger les demandes vers /cdn vers un hôte de fichiers situé sur file.host/myfiles

Le fichier de configuration se lit comme suit :

serveur {
    écoute 80;
    nom_serveur my.web.server;

    emplacement ^~ /cdn {      
        proxy_pass https://file.host/myfiles;
    }
}

Cette configuration redirige avec succès toutes les demandes entrantes vers l'hôte de fichiers de destination, cependant je n'ai pas de redirections vers index.html si un / ou une route est saisie.

Un exemple de ce que j'aimerais réaliser est le suivant :

my.web.server/cdn           => (proxy) file.host/myfiles/index.html
my.web.server/cdn/          => (proxy) file.host/myfiles/index.html
my.web.server/cdn/images    => (proxy) file.host/myfiles/images/index.html
my.web.server/cdn/images/   => (proxy) file.host/myfiles/images/index.html

my.web.server/cdn/**        => (proxy) file.host/myfiles/**/index.html
my.web.server/cdn/**/       => (proxy) file.host/myfiles/**/index.html

Idéalement, vous ne verriez pas index.html dans l'URL et cela se redirigerait simplement vers ce chemin de fichier, cependant, si ce n'est pas possible, rediriger l'utilisateur là-bas serait également acceptable.


J'ai essayé des choses comme :

emplacement ^~ /cdn {      
    proxy_pass https://file.host/myfiles;
    try_files $uri $uri/ $uri/index.html;
}

Ce que j'espère réaliser avec cela est d'indiquer à nginx de "rediriger ici", essayer de voir s'il y a un fichier et si rien n'apparaît, essayer de trouver un index.html dans cette route.

0 votes

try_files teste la présence d'un fichier local. Vous devez gérer une réponse 404 et rediriger correctement. Peut-être quelque chose d'horrible comme cette réponse fonctionnera pour vous.

0voto

Bernard Rosset Points 1303

Depuis les docs proxy_pass :

Si la directive proxy_pass est spécifiée avec un URI, alors lorsque une requête est passée au serveur, la partie d'un URI de requête normalisé qui correspond à l'emplacement est remplacée par un URI spécifié dans la directive

Ainsi :

  1. Votre URI de requête est en train d'être normalisé
  2. La partie de son homologue normalisé correspondant à votre emplacement /cdn est remplacée par /myfiles

Rappelez-vous que la normalisation supprime les artefacts comme les traversées de répertoires, donc une demande de /cdn/** se traduira très probablement par un chemin normalisé /.

Si vous souhaitez éviter la normalisation, vous devrez interférer avec la correspondance normale. Vous pourriez essayer (non testé) :

location ^~ /cdn {
    rewrite    /cdn(.*) $1 break;
    proxy_pass https://file.host/myfiles;
}

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