The chances began to rack up and Silva curled an effort just wide from the edge of the area.
He then gave City the lead in the 41st, when Grealish set up the Portuguese, who unleashed an unstoppable swerving drive from the edge of the area that was too good for Keylor Navas.
City missed a huge chance to make it 2-0 soon after the restart when Phil Foden lost control as he tried to square to Haaland. Moments later, Aymeric Laporte headed straight at Navas.
City kept the pressure on but Haaland missed two sitters.
Navas spilled Foden’s shot from the edge of the area and the Norwegian looked prime to score the rebound, but he hit the crossbar. The striker had another go from the second rebound but was even worse with that attempt, firing over from inside the six-yard box.
Forest scored with seven minutes when Morgan Gibbs-White sent a low cross for Wood to tap in.
It was Wood’s first goal for the club following his loan deal from Newcastle United in January, with Forest making the move permanent this week.
“It’s nice to do it for the fans. I’m sure it’s not often we get a good, positive result against a big side like this,” Wood said after the game.
“I love scoring and that’s what I want to do as much as possible. And I want to continue and build and become better. To do it in front of your home crowd for your first one is fantastic. It’s nice to finally be a part of it and kick on now.”