Maison  >  Article  >  interface Web  >  Exemple de partage de correspondance d'emplacement Nginx

Exemple de partage de correspondance d'emplacement Nginx

小云云
小云云original
2018-02-12 15:45:251797parcourir

Cet article partage principalement avec vous des exemples de correspondance d'emplacement Nginx. Puisque l'équipe sépare le front-end et le back-end, le front-end prend en charge les couches Nginx et nœuds. Dans le travail quotidien, il y a beaucoup de choses à faire. avec Nginx. Je ne connaissais pas grand-chose aux règles de correspondance de localisation auparavant. Afin de comprendre comment la correspondance de localisation est effectuée, j'espère que cela pourra aider tout le monde.

Règles de grammaire

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

Les règles de grammaire sont très simples, un location mot-clé, suivi de modificateurs facultatifs, suivi des caractères à faire correspondre, et les accolades sont celles-là opération à exécuter.

Modificateur

  • = signifie une correspondance exacte. Un accès ne se produira que si le chemin de l'URL demandé est exactement égal à la chaîne suivante.

  • ~ indique que la règle est définie à l'aide d'expressions régulières et est sensible à la casse.

  • ~* signifie que la règle est définie à l'aide d'expressions régulières et n'est pas sensible à la casse.

  • ^~ signifie que si le caractère après le symbole correspond le mieux, cette règle sera utilisée et aucune recherche ultérieure ne sera effectuée.

Le processus de correspondance

sérialise l'URL demandée. Par exemple, décodez les caractères tels que %xx, supprimez plusieurs / connectés dans l'URL et analysez ., .., etc. Cette étape constitue le travail préliminaire au matching.

location a deux formes de représentation, l'une consiste à utiliser des caractères de préfixe et l'autre consiste à utiliser des expressions régulières. S'il est régulier, il y a un modificateur ~ ou ~* devant.

Le processus de correspondance spécifique est le suivant :

Vérifiez d'abord l'emplacement défini à l'aide du caractère préfixe, sélectionnez l'élément correspondant le plus long et enregistrez-le.

Si un emplacement correspondant exactement est trouvé, c'est-à-dire un emplacement utilisant le modificateur =, terminez la recherche et utilisez sa configuration.

Recherchez ensuite les emplacements définis à l'aide d'expressions régulières dans l'ordre s'ils correspondent, arrêtez la recherche et utilisez la configuration qu'il définit.

S'il n'y a pas d'emplacement régulier correspondant, l'emplacement de caractère de préfixe correspondant le plus long enregistré précédemment est utilisé.

Sur la base du processus de correspondance ci-dessus, nous pouvons obtenir les deux informations suivantes :

  1. L'ordre dans lequel les emplacements définis à l'aide d'expressions régulières apparaissent dans le fichier de configuration est important. Parce qu'une fois le premier modèle régulier correspondant trouvé, la recherche s'arrête et il n'y a aucune chance de faire correspondre les modèles réguliers suivants.

  2. L'utilisation de la correspondance exacte peut accélérer la recherche. Par exemple, si vous demandez fréquemment /, vous pouvez utiliser = pour définir l'emplacement.

Exemple

Ensuite, nous utiliserons un exemple pour expliquer le processus de correspondance en détail.

Supposons que nous ayons le fichier de configuration suivant :

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /user/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

Demande à / de correspondre avec précision à A, sans plus chercher.

Demande/index.html correspond à B. Tout d'abord, recherchez les caractères de préfixe correspondants, trouvez la configuration B correspondante la plus longue, puis recherchez les règles régulières correspondantes dans l'ordre. Le résultat n'est pas trouvé, donc la correspondance la plus longue de la balise précédente est utilisée, qui est la configuration B.

Demande/user/index.html correspond à C. Trouvez d’abord le C correspondant le plus long. Puisqu’il n’y a pas de motif régulier correspondant plus tard, le C correspondant le plus long est utilisé.
Demande/user/1.jpg correspond à E. Tout d’abord, recherchez les caractères de préfixe pour trouver l’élément correspondant le plus long C, puis continuez la recherche régulière et trouvez l’élément correspondant E. Utilisez donc E.

Demande/images/1.jpg correspond à D. Tout d’abord, recherchez les caractères de préfixe et trouvez la correspondance D la plus longue. Cependant, ce qui est spécial, c'est qu'il utilise le modificateur ^~ et n'effectue plus la recherche de correspondance régulière ultérieure, donc D est utilisé. Ici, s’il n’y a pas de modificateur précédent, la correspondance finale est en réalité E. Vous pouvez réfléchir au pourquoi.

Demande/documents/about.html correspond à B. Parce que B signifie que toute URL commençant par / correspondra. Dans la configuration ci-dessus, seul B peut la satisfaire, donc B correspond.

Utilisation de l'emplacement @name

@ est utilisé pour définir un emplacement nommé. Principalement utilisé pour la redirection interne et ne peut pas être utilisé pour traiter les demandes normales. Son utilisation est la suivante :

location / {
    try_files $uri $uri/ @custom
}
location @custom {
    # ...do something
}

Dans l'exemple ci-dessus, lorsque vous essayez d'accéder à l'url et que vous ne parvenez pas à trouver le fichier correspondant, il sera redirigé vers notre emplacement nommé personnalisé (personnalisé ici).

Il convient de noter que l'emplacement nommé ne peut pas imbriquer d'autres emplacements nommés .

Le / à la fin de l'URL est-il nécessaire ?

Il y a trois points concernant le / à la fin de l'URL qui doivent être expliqués. Le premier point est lié à la configuration de la localisation, et les deux autres points n'ont rien à voir avec celle-ci. Cela n'a aucun effet que les caractères à l'emplacement

  1. incluent / ou non. En d’autres termes, /user/ et /user sont identiques.

  2. Si la structure de l'URL est sous la forme de https://domain.com/, aucune redirection n'aura lieu, qu'il y ait ou non un / à la fin. Car le navigateur ajoute / par défaut lors d'une requête. Bien que de nombreux navigateurs n’affichent pas / dans la barre d’adresse. Vous pouvez le vérifier en visitant Baidu.

  3. Si la structure de l'URL est https://domain.com/some-dir/. Manquer / à la fin entraînera une redirection. Car selon la convention, le / à la fin de l'URL représente le répertoire, et l'absence de / représente le fichier. Ainsi, lors de l'accès à /some-dir/, le serveur se rendra automatiquement dans le répertoire pour trouver le fichier par défaut correspondant. Si vous accédez à /some-dir, le serveur recherchera d'abord le fichier some-dir S'il ne le trouve pas, il traitera some-dir comme un répertoire et redirigera vers /some-dir/ pour trouver le fichier par défaut dans ce répertoire. Vous pouvez tester votre site Web pour voir s’il ressemble à ça.

Résumé

Il existe deux formes de configuration d'emplacement, les caractères de préfixe et les expressions régulières. Lors de la recherche d'une correspondance, recherchez d'abord le caractère de préfixe, sélectionnez la correspondance la plus longue, puis recherchez le modèle régulier. Les caractères normaux ont une priorité plus élevée que les caractères préfixes.

Les recherches régulières sont effectuées dans l'ordre dans le fichier de configuration. Par conséquent, l’ordre des expressions régulières est très important. Il est recommandé de placer les plus détaillées en premier.

L'utilisation de = une correspondance précise peut accélérer la séquence de recherche Si le nom de domaine racine est fréquemment consulté, il est recommandé d'utiliser =.

Recommandations associées :

Méthode d'actualisation de la page Javascript et introduction à l'utilisation de location.reload()

Maîtriser complètement $location dans AngularJS

Notes sur le saut d'emplacement d'en-tête du programme PHP


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn