Comment contrôler NGINX "Localisation" de la directive ordre de pertinence?
J'essaie d'optimiser mon "localisation" des directives et ne peut pas trouver un bon moyen de déterminer si un emplacement spécifique de match est même tentée. À l'aide de echo
à l'intérieur de l'emplacement du bloc n'aide pas ici.
La NGINX ngx_http_core_module documentation est quelque peu déroutant.
D'utiliser des expressions régulières, vous devez utiliser un préfixe:
-
~
Pour la casse correspondant -
~*
Pour la correspondance insensible à la casse
Comment le match est effectuée:
-
Directives avec la
=
préfixe correspondant à la requête exactement. Si elle est trouvée, la recherche s'arrête. -
Toutes les autres directives classiques cordes. Si ce match a utilisé le
^~
préfixe, la recherche s'arrête. -
Expressions régulières, dans l'ordre qu'ils sont définis dans le fichier de configuration.
-
Si #3 a abouti à un match, ce résultat n'est utilisé. Sinon, le match de #2 est utilisé.
Numéro 2 ici dit "classique chaînes" mais alors, dit-il peut être utilisé avec le ^~
préfixe. Ne pas ~
implique une RegExp? Si non, comment est-il déterminer ce qu'est une n'est pas une RegExp?
Plus précisément, je veux la suite:
-
Servir à rien de littéral
/assets
directement. ARRÊTER LA RECHERCHE. -
Servir quelque chose correspondant RegExp
\.php$|/$
via fast-CGI ARRÊTER la RECHERCHE. -
Servir tout le reste directement via littérale
/
De cette façon, il ya seulement un /
match tentative pour non-dynamique des fichiers desservies à partir de l'extérieur de l'actif.
J'ai:
location ^~ /assets {} # search-terminating literal? or regex?
location ~ \.php$|/$ {}
location /{} # is this match always attempted?
À partir du document, il semble que la commande serait 1-3-2, toujours en cours d'exécution littérale /
match. Oui, cette optimisation ne fera aucune différence pour la performance réelle, mais je veux juste clarifier certaines ambiguïtés.
Vous devez vous connecter pour publier un commentaire.
À partir du wiki:
Donc, ce sera assortie d'abord:
location ~ \.php$ {}
Même si des biens sont servis à partir de
location /{}
À l'intérieur du bloc php vous aussi vous voulez de les protéger contre les téléchargements malveillants avant de passer à fastcgi:
Comme vous pouvez le voir nginx fonctionne un peu différemment que vous pourriez vous attendre.
if
qui doit être utilisé uniquement pour réécrire/retour. Je pense qu'ils sont de travail sur la simplification de la ce. Pour votre situation, il fonctionne comme ceci: 1. php regex pour vérifier avec un arrêt si c'est un match de 2. / pour tout le contenu statique.try_files
. En utilisant nginx sur Apache est un gain de performances bien 🙂