Heat the olive oil in a large soup pot or Dutch oven over medium heat. Add the onion, carrots, and celery. Cook for 5 to 6 minutes, stirring occasionally, until the onion softens.
Add the garlic, zucchini, Italian seasoning, salt, and pepper. Stir and cook for 1 minute, just until the garlic smells fragrant.
Pour in the diced tomatoes with their juices and the vegetable broth. Bring the soup to a boil over medium-high heat.
Stir in the drained beans and pasta. Reduce the heat to maintain a steady simmer. Cook uncovered for 9 to 11 minutes, stirring once or twice so the pasta does not stick, until the pasta and vegetables are tender.
Stir in the spinach and cook for 1 to 2 minutes, until wilted. Remove the pot from the heat and stir in lemon juice, if using.
Taste the soup and add more salt or pepper if needed. Ladle into bowls and top with Parmesan and herbs, if desired. Serve hot.