Почему не проксируется запрос?
location ^/api/ {
    proxy_pass http://app:8081/;
}

location / {
    proxy_pass http://app:8080;
}
Если хотели задать регулярное выражение, то забыли добавить ~
location ~ ^/api/ {

Если нужен обычный префиксный локейшн, то нужно убрать лишний ^
location /api/ {
VirtualHost *:8080

После * он не ищет других вхождений, для него это полное попадание в домен, пропишите ip или имя вместо *