Сервер. Nginx.
Как Nginx выбирает блоки server и location.
Поиск server:
1. Сопоставляет IP адрес и порт запроса с директивой listen.
Если найдено больше 1го, см. продолжает поиск в п.2 среди найденных server.
2. Сопоставляет Host из заголовка запроса с директивой server_name:
2.a. Поиск точного совпадения. Если найдено, используется первый найденный.
2.b. Поиск с подстановочным символом в начале (*.example.com). Если найдено несколько, используется где совпадение больше.
2.с. Поиск с подстановочным символом в конце. Далее аналогично п.2.b.
2.d. Поиск по регулярному выражению. Если найдено несколько, используется первый найденный.
2.e. Если Host не найден среди server_name, запрос будет обработан server с заданным параметром default_server или первым, если параметр не задан.
Поиск location:Сопоставляет URI (без аргументов) с блоками location.
Пример URI: /index.php
1. Ищет (но пока не выбирает) префиксные location.
Пример: location /index {}
2. Если найден с точным сопадением (задан символом =), выбирает его. Иначе, продолжает поиск в п.3.
Пример: location = /index.php {}
3. Если среди найденных максимально совпадающий содержит модификатор ^~, выбирает его. Иначе, запоминает значение и продолжает поиск в п.4.
Пример: location ^~ /index.ph {}
4. Ищет среди location, заданных регулярным выражением. Если найден, выбирает первый. Иначе, значение из п.3.
Пример: location ~ .php$ {}
Тут можно протестировать различные варианты.