Carefully cut the butternut squash in half lengthwise, scoop out the seeds, and peel the skin. Then, chop the flesh into cubes.
In a large pot or Dutch oven, heat the olive oil over medium heat. Add the chopped onion and sauté for about 5 minutes, or until soft and translucent.
Add the minced garlic, ground ginger, and ground cinnamon. Stir for about 1 minute until fragrant.
Add the cubed butternut squash to the pot, followed by the vegetable or chicken broth. Bring the mixture to a boil, then reduce the heat and let it simmer for about 20-25 minutes, or until the squash is tender.
Once the squash is cooked, use an immersion blender to puree the soup until smooth. Alternatively, transfer the soup in batches to a regular blender and blend until smooth.
Stir in the coconut milk (or heavy cream) and season with salt and pepper to taste. Heat the soup gently for a few more minutes until warmed through.
Ladle the soup into bowls and garnish with fresh herbs, if desired. Serve warm.