Maison > Article > interface Web > Exemple de partage de correspondance d'emplacement Nginx
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.
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.
=
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.
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 :
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.
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.
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.
@ 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 .
/
à 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
incluent /
ou non. En d’autres termes, /user/
et /user
sont identiques.
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.
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.
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!