I'm trying to optimize my 'location' directives and cannot find a good way of determining if a specific location match is even attempted. Using echo inside the location block doesn't help here.
The NGINX ngx_http_core_module documentation is somewhat confusing.
To use regular expressions, you must use a prefix:
- ~For case sensitive matching
- ~*For case insensitive matching
How the match is performed:
- Directives with the - =prefix that match the query exactly. If found, searching stops.
- All remaining directives with conventional strings. If this match used the - ^~prefix, searching stops.
- Regular expressions, in the order they are defined in the configuration file. 
- If #3 yielded a match, that result is used. Otherwise, the match from #2 is used. 
Number 2 here says "conventional strings" but then says it can be used with the ^~ prefix. Doesn't ~ imply a RegExp? If not, how does it determine what is an isn't a RegExp?
Specifically, I want the following:
- Serve anything out of literal - /assetsdirectly. STOP SEARCH.
- Serve anything matching RegExp - \.php$|/$via fast-CGI STOP SEARCH.
- Serve everything else directly via literal - /
This way, there is only a / match attempt for non-dynamic files served from outside of assets.
I have:
location ^~ /assets {}      # search-terminating literal? or regex?
location ~ \.php$|/$ {}
location / {}               # is this match always attempted?
From the document, it looks as though the actual order would be 1-3-2, always running the literal / match. Yes, this optimization won't make any difference for real performance, but I just want to clear up some ambiguity.
 
     
    