Uma solução semelhante a isso, é utilizar o next.config.js, que ao incluir a função rewrites(), você vai ter a reescrita da colicitação. segue função:

async rewrites() {
        return [
          {
            source: '/api/:path*',
            destination: `${process.env.BACKEND_URL}/:path*`
          }
        ]
      }

em source temos a origem que será substituida, no caso estamos indicando que qualquer solicitação para /api, será reescrita, exemplo: http://localhost:3000/api/login tudo que está após /api/, será vinculado a variavel :path, que será usado no destino em destination, temos o destino, que pode ser algo fixo, ou o que recomendo que seja variavel de ambiente, conforme o exemplo. No caso do exemplo do login, internamente o processamento seria visivel ao usuario para localhost:3000/api/login, porem internamente teria sido reescrito para o backend localhost:8080/login Observe que tudo que colocar após api/ será considerado no destino, exemplo: localhost:3000/api/cadastro/cliente/novo será reescrito internamente para localhost:8080/cadastro/cliente/novo os metodos não são reescrito, então se fizer POST na rota, a reescrita também usará POST