Нет необходимости иметь вложенные местоположения, как в другом ответе. Вложенные местоположения в NGINX часто дают ложное представление о наследовании директив. Чаще всего они не наследуются, потому что NGINX в любом случае выбирает один спецификатор c location
. По этим причинам, если вы можете, избегайте вложенных расположений.
Вы можете просто изменить порядок расположений, чтобы более конкретный c был первым. NGINX будет соответствовать тому, который появляется первым в конфигурации (если они оба совпадают):
location ~ /api/v1/myservice/(.*)/client/detail {
return 200 "service 2";
}
location ~ /api/v1/myservice/(.*)/client {
return 200 "service 1 ";
}
В качестве альтернативы, несколько лучше (по соображениям производительности), вы можете настроить свои регулярные выражения для более точного соответствия. Тогда размещение в конфигурации не имеет значения:
location ~ ^/api/v1/myservice/(.*)/client$ {
return 200 "service 1 ";
}
location ~ ^/api/v1/myservice/(.*)/client/detail$ {
return 200 "service 2";
}