Gabriel Martinelli was rewarded for scoring the stoppage-time winner against Japan in the previous round, as the Arsenal winger replaced the injured Lucas Paqueta in the lone change to Brazil’s line-up.
Norway were boosted by the return of Julian Ryerson, the Borussia Dortmund defender fit again after missing the past two games with a thigh injury.
Patrick Berg thought he had given Norway the lead inside three minutes, but his effort was ruled out for offside in the build-up.
After a rocky start, Brazil won a penalty when Kristoffer Ajer clattered into Matheus Cunha in the box.
The Brazilians were left furious as referee Ismail Elfath initially waved away their appeals, but VAR intervened and the decision was overturned.
Guimaraes stepped up, but Nyland guessed correctly, diving low to his left to push away the Newcastle midfielder’s tame penalty.
Nyland again came to Norway’s rescue, getting a crucial touch to Martinelli’s low drive as it flashed across goal, denying Guimaraes a simple tap-in.
When Martin Odegaard lost possession on the edge of his own box, Nyland once more saved Norway as he stuck out a leg to thwart Vinicius Junior.
Haaland had struggled to make a significant impact, but his strength created a glorious opening for Norway before half-time.
The striker caused problems for Gabriel Magalhaes and Marquinhos in the Brazil defence before the ball broke kindly for Odegaard, whose effort was well saved by Alisson Becker.
Norway coach Stale Solbakken brought on Oscar Bobb and Andreas Schjelderup at the break for Antonio Nusa and Alexander Sorloth, but it was the introduction of Endrick that almost changed the game immediately.
Vinicius slipped Endrick through on goal with a delightful outside-of-the-foot pass, only for the teenager to dink wide as Nyland came out to close him down.
