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:

  1. ~ Pour la casse correspondant

  2. ~* Pour la correspondance insensible à la casse

Comment le match est effectuée:

  1. Directives avec la = préfixe correspondant à la requête exactement. Si elle est trouvée, la recherche s'arrête.

  2. Toutes les autres directives classiques cordes. Si ce match a utilisé le ^~ préfixe, la recherche s'arrête.

  3. Expressions régulières, dans l'ordre qu'ils sont définis dans le fichier de configuration.

  4. 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:

  1. Servir à rien de littéral /assets directement. ARRÊTER LA RECHERCHE.

  2. Servir quelque chose correspondant RegExp \.php$|/$ via fast-CGI ARRÊTER la RECHERCHE.

  3. 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.

InformationsquelleAutor leeoniya | 2011-12-08