2 votes

Configuration du reverse proxy de Nginx pour ajouter index.html sur les requêtes http entrantes lorsque seul le nom du chemin existe

Je dois configurer nginx en tant que proxy inverse pour mon site statique hébergé sur des espaces DO (stockage d'objets de type S3).

Le problème avec leur s3 est que si je demande un nom de chemin sans nom de fichier spécifique, il ne donne pas index.html par défaut (ce que nous attendions).

Si je demande s3.example.com/some/path/ alors il donne une erreur au lieu de servir index.html dans ce dossier. DO est au courant de ce problème mais ne va pas le résoudre de sitôt.

Nous sommes bloqués parce que nous avons consacré beaucoup de temps et d'efforts à la migration vers DO. Nous voulons que s3.example.com/some/path/ charge s3.example.com/some/path/index.html - ce qui est le comportement normal d'un serveur web.

Nginx peut-il servir de proxy inverse ? Dans tous les cas, nous utiliserions un proxy inverse devant le sous-domaine et ferions un proxy_pass, c'est-à-dire que exemple.com/quelque chose/chemin/ serait un proxy_pass vers s3.exemple.com/quelque chose/chemin/ - ceci utilise un proxy_pass normal.

Je voulais savoir si nous pouvions ajouter l'index.html tout en faisant le proxy_pass - MAIS seulement pour les demandes qui n'ont pas de nom de fichier. Pour les requêtes qui ont un nom de fichier associé, comme par exemple example.com/som/path/image.jpg ou un autre fichier html ou autre, nous ne voulons pas ajouter l'index.html bien sûr.

Le problème est que souvent, il n'y a pas de fin / dans l'url, l'url est comme suit 1 exemple.com/quelque chose/chemin OU comme 2 exemple.com/quelquechose/chemin/

Et dans certains autres cas, ce sera 3 exemple.com/quelque chose/chemin/ex.html (ou jpg ou autre)

Dans le premier cas nous voulons ajouter index.html Dans le deuxième cas /index.html Dans le troisième cas, rien

A quoi ressemblerait la configuration dans cette situation ?

Merci d'avance...

3voto

HugoFS Points 313

Vous pourriez réécrire chaque URI qui se termine par / ou ne contient pas de . dans le dernier élément du chemin, avant de le transmettre au serveur en amont.

Par exemple :

server {
    ...
    location / {
        ...
        rewrite ^(.*)/$ $1/index.html break;
        rewrite ^(.*/[^./]+)$ $1/index.html break;
        proxy_pass ...;
    }
}

Véase ce document pour les détails.

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