Location block priorities
This problem frequently occurs when using multiple location blocks in the same server block: configuration does not apply as you thought it would.
As an example, suppose that you want to define a behavior to be applied to all image files that are requested by clients:
location ~* .(gif|jpg|jpeg|png)$ { # matches any request for GIF/JPG/JPEG/PNG files proxy_pass http://imageserver; # proxy pass to backend }
Later on, you decide to enable automatic indexing of the /images/
directory. Therefore, you decide to create a new location
block, matching all requests starting with /images/
:
location ^~ /images/ { # matches any request that starts with /images/ autoindex on; }
With this configuration, when a client requests to download /images/square.gif
, Nginx will apply the second location's block only. Why not the first one? The reason is that location
blocks are processed in a specific order. For more information about location
block priorities, refer...