Как я понял в post_handler вместо цикла должно получиться что-то типа:
При пустом звене цепочки как-то передать из колбэка с return void в хэндлер - NGX_OK для финализации запроса
Если в цепочке есть не пустой буфер - отправить буфер в бэкэнд и в случае успеха очистить звено через ngx_free_chain
Снова передать из колбэка с return void в хэндлер NGX_DONE/NGX_AGAIN(разницу еще не понял?) и
при следующей итерации воркера будет вновь вызвана функция колбека из ngx_http_read_client_request_body
Для отработки следующего буфера из не освобожденного звена цепочки.
Но не уловил как из колбека с return void сказать хэндлеру NGX_DONE/NGX_AGAIN/NGX_OK ?