Match ends, Rotherham United 1, Norwich City 2.
An injury-time penalty from Jordan Hugill gave Norwich all three points against 10-man Rotherham.
The game looked set to end level before Millers debutant Florian Jozefzoon fouled Emi Buendia in the area and Hugill slammed home from the spot.
Rotherham had taken an early lead through Freddie Ladapo before the same player saw a penalty saved by Tim Krul.
The Canaries levelled after the break when Michael Ihiekwe put Max Aarons' cross past his own goalkeeper and the Millers had to play the final 20 minutes with only 10 men after Angus MacDonald was sent off for a dreadful challenge on Oliver Skipp.
Millers boss Paul Warne, self-isolating after a family member tested positive for Covid-19, was forced to watch the game from home.
Daniel Farke's side were masters of their own downfall for the opening goal as Krul's lofted pass was cut out and the ball bounced through for Ladapo to smash home.
The Canaries came close to a leveller when Marco Stieperman drew a fine save from home keeper Jamal Blackman before Krul atoned for his earlier mistake with an excellent low stop from Ladapo's spot-kick.
Norwich, who picked up just their second win in 17 matches, needed an own goal from Ihiekwe to level before MacDonald was sent off for an awful studs-up tackle on Tottenham loanee Skipp.
Rotherham goalkeeper Jamal Blackman made a brilliant double save to deny Teemu Pukki and Hugill as the hosts looked set to hold on only for Jozefzoon's poor challenge to cost them in stoppage time.
Rotherham assistant manager Richie Barker:
"It's a hard one to take, no matter the time of the goal, because of the performance. Unfortunately our best two performances of the season have been home defeats.
"It's a monumental effort for no points. I thought we had the two best chances after we went down to 10 men. A lot of things worked towards us not winning the game.
"We face-timed Paul before the game and at half-time. He said it was even worse watching it from home, but he will be proud of the players."
Norwich head coach Daniel Farke:
"I have to give plaudits to Rotherham. They have confidence from promotion. They were brave, aggressive and pressed us with intensity.
"It feels like a massive win. There is no replacements for wins and with this three points we are in a solid position. It was a win for team spirit and togetherness.
"We created so much in the first half. We could not create more, but we were still unable to score. I told them that if they kept going we would drive away with three points."
- 21MacDonaldBooked at 71mins
- 25CrooksBooked at 90mins
- 4MacDonaldSubstituted forWoodat 73'minutes
- 10LadapoSubstituted forSmithat 77'minutes
- 14MillerSubstituted forJozefzoonat 67'minutes
- 5HanleyBooked at 56mins
- 20SkippSubstituted forVrancicat 80'minutes
- 17BuendíaSubstituted forMcLeanat 90+7'minutes
- 18StiepermannSubstituted forPukkiat 80'minutes
- David Webb
- Shots on Target
Second Half ends, Rotherham United 1, Norwich City 2.
Substitution, Norwich City. Kenny McLean replaces Emiliano Buendía.
Matt Crooks (Rotherham United) is shown the yellow card for a bad foul.
Mario Vrancic (Norwich City) wins a free kick in the defensive half.
Foul by Matt Crooks (Rotherham United).
Goal! Rotherham United 1, Norwich City 2. Jordan Hugill (Norwich City) converts the penalty with a right footed shot to the bottom left corner.
Penalty Norwich City. Emiliano Buendía draws a foul in the penalty area.
Penalty conceded by Florian Jozefzoon (Rotherham United) after a foul in the penalty area.
Grant Hanley (Norwich City) wins a free kick in the defensive half.
Foul by Ben Wiles (Rotherham United).
Attempt missed. Mario Vrancic (Norwich City) header from the right side of the six yard box misses to the left. Assisted by Emiliano Buendía with a cross following a corner.
Corner, Norwich City. Conceded by Jamal Blackman.
Attempt saved. Jordan Hugill (Norwich City) right footed shot from outside the box is saved in the bottom right corner. Assisted by Ben Gibson.
Attempt missed. Jordan Hugill (Norwich City) header from the right side of the six yard box is high and wide to the right. Assisted by Adam Idah with a cross.
Foul by Mario Vrancic (Norwich City).
Ben Wiles (Rotherham United) wins a free kick in the defensive half.
Corner, Rotherham United. Conceded by Xavi Quintillá.
Attempt saved. Matt Crooks (Rotherham United) right footed shot from the centre of the box is saved in the bottom right corner. Assisted by Michael Ihiekwe with a headed pass.
Foul by Ben Gibson (Norwich City).