Cristiano Ronaldo could have wrapped it up from Marcelo's cross as Madrid looked to finish it off; instead James Rodríguez drilled past Navas at the second attempt to revive Bayern hopes, but Madrid held on in a frenetic final half-hour.
The win means Real Madrid is potentially just 90 minutes away from a Champions League three-peat, which has not been done since Bayern Munich did it in the mid 70s.
Real boss Zinedine Zidane made a double-change in the 72nd minute, bringing on Gareth Bale and Casemiro for Lucas Vazquez and Mateo Kovacic, respectively. Heynckes completely rotated his squad, giving debuts to several youth academy products. We will need to play like never before this year to be able to advance.
Wisconsin Refinery Fire Some Seen for Miles, Prompts Evacuations
In all, 21 people sought hospital care as a result of the fire, and all but one has been released, the News Tribune reported. Authorities earlier said the fire was out, but it later reignited, sending up billowing clouds of thick, black smoke.
So often the hero at the other end for Madrid in games of such magnitude, it was an error from skipper Ramos that enabled Bayern to get the start they needed.
Speaking before the second leg against Bayern, Zidane "dismissed speculation over his future", says Spanish publication Marca. Thomas Muller missed an excellent chance in the opening minutes and Robert Lewandowski missed another late in the game. Ribery was the visitors' most unsafe threat in both legs but did most of his best work in creating chances for teammates that were then missed.
What it does not reveal is how great a scare they got as Bayern Munich came within a whisker of upsetting the odds in a gripping second leg.
Highlights will be posted live during the match.
Bayern will need a strong performance to overturn the 2-1 deficit in front of a strong and boisterous home crowd.
But despite their efforts the Bundesliga side could not find a way past Keylor Navas, and it was Madrid that booked a place in the Champions League final.