Вероятно в location /api/v1/ у вас прописано что то вроде
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
Поэтому запрос и уходит в location ~ "^(.+\.php)($|/)"
Если я правильно понимаю задачу, то вам нужно для ответов бэкенда с content-type json / xml проставлять соответсвующий хедер.
Здесь может помочь проверка хедера Content-type в ответе сервера.
Получить его можно через переменные upstream модуля: $upstream_http_$HEADER. Тоесть в вашем случае это будет выглядеть как $upstream_http_content_type.
А далее если вам нужно кастомное значение загловка для каждого типа контента, применить map, как то так:
map $upstream_http_content_type $type {
default "custom_header_default";
"application/json" "custom_header_json";
"text/xml" "custom_header_xml";
}
Сам такое ни разу не делал, поэтому отвечаю только "теоретически", как это может работать.