Match ends, Borussia Dortmund 2, Real Madrid 0.
Real Madrid held off a determined fightback by Borussia Dortmund to secure a place in the semi-finals of the Champions League.
Real won the first leg 3-0 and should have sealed the tie, but Angel Di Maria's early penalty was saved.
From then on, the hosts took control as Marco Reus rounded Iker Casillas and then rifled in from close range to put the hosts close to forcing extra-time.
Henrikh Mkhitaryan hit the post, but Real held on to progress.
The Spanish side were overwhelming favourites to progress before kick-off, but they were second best throughout to a superb Dortmund side at Signal Iduna Park.
Real are all too aware of Dortmund's free-scoring capabilities at home, having suffered a 4-1 defeat that ultimately cost them a place in last year's Champions League final.
Robert Lewandowski scored all four of Dortmund's goals on that occasion and he returned to the German side's starting line-up for this game after missing the first leg through suspension.
But before he even had chance to make an impression, Real should have been ahead. They were awarded a penalty when full-back Lukasz Piszczek was adjudged to have handled Fabio Coentrao's cross inside the area, but Di Maria hit the resulting spot-kick straight at goalkeeper Roman Weidenfellar.
That, though, was to prove to be the visitors' only real chance of the first half as Dortmund set about staging what would have been a remarkable comeback.
They took the lead when Pepe weakly headed Piszczek's long ball out of defence short of Casillas. Reus raced in to steal possession before knocking the ball past the Real goalkeeper and slotting into the empty net.
With Cristiano Ronaldo, who injured his knee in the first leg, on the bench and Gareth Bale, Karim Benzema and Di Maria struggling to make an impression, Dortmund continued to attack a clearly rattled Real backline. Lewandowski felt he should have been awarded a penalty when he fell inside the area as he challenged for the ball with Sergio Ramos.
Only Deportivo La Coruna have come back from a three-goal deficit in the Champions League, when they beat AC Milan 4-0 in 2004. Real coach Carlo Ancelotti was in charge of the Milan side then and he must have feared history was to repeat itself when Reus scored again.
The Germany international fed a pass to Lewandowski just inside the area and, though the striker's shot struck the bottom of the far post, Reus raced onto the rebound and smashed it into the roof of the net.
Real improved after the break, with Bale in particular imposing himself on the game as he twice threatened, first forcing a good save from Weidenfeller before curling a low effort just wide of the far post after breaking into the box.
However, only the woodwork prevented Dortmund from levelling the tie as Reus's smart ball slipped in Mkhitaryan, who rounded Casillas but hit the post.
Dortmund had just one more chance to level the tie as Mkhitaryan received the ball unmarked in the middle of the area, but his shot was straight at Casillas.
Real Madrid coach Carlo Ancelotti:
"We played a very slow game, with many errors and no confidence. After the penalty a bit of fear crept into the team.
"Every game is difficult at this stage and we saw that today. It was a night of struggling, of suffering but at the end we are just happy to have made it into the semis."
"Cristiano Ronaldo was fine, we didn't want to risk him, because of the intensity of the tie, and we didn't have to.
"Hopefully he's better soon and he is ready for the semi-final. It's not a big problem because if it were, he wouldn't have been on the bench. He has time to recover and could play on Saturday."
Borussia Dortmund coach Jurgen Klopp:
"You could make a video of this game and show it to the teams that lose a first leg 3-0.
"My players wanted to go through but we were missing that one goal we did not score in Madrid last week.
"The lads gave it everything they had and I have no idea how many kilometres they ran today."
- 26PiszczekSubstituted forAubameyangat 81'minutesBooked at 82mins
- 11ReusBooked at 75mins
- 19GroßkreutzBooked at 90mins
- 15CarvajalBooked at 68mins
- 5da Silva Coentrão
- 14AlonsoBooked at 31mins
- 4RamosBooked at 27mins
- 24IllarramendiSubstituted forIscoat 45'minutes
- 9BenzemaBooked at 90minsSubstituted forVaraneat 90+2'minutes
- 22Di MaríaSubstituted forCasemiroat 73'minutesBooked at 83mins
- 7Cristiano Ronaldo
- Damir Skomina
- Shots on Target
Second Half ends, Borussia Dortmund 2, Real Madrid 0.
Attempt saved. Gareth Bale (Real Madrid) left footed shot from outside the box is saved in the bottom left corner. Assisted by Isco.
Substitution, Real Madrid. Raphael Varane replaces Karim Benzema.
Karim Benzema (Real Madrid) is shown the yellow card.
Hand ball by Mats Hummels (Borussia Dortmund).
Attempt missed. Isco (Real Madrid) right footed shot from the left side of the box misses to the right. Assisted by Xabi Alonso.
Attempt saved. Gareth Bale (Real Madrid) left footed shot from the centre of the box is saved in the centre of the goal. Assisted by Karim Benzema with a through ball.
Corner, Borussia Dortmund. Conceded by Daniel Carvajal.
Foul by Daniel Carvajal (Real Madrid).
Manuel Friedrich (Borussia Dortmund) wins a free kick in the defensive half.
Casemiro (Real Madrid) is shown the yellow card for a bad foul.
Foul by Casemiro (Real Madrid).
Erik Durm (Borussia Dortmund) wins a free kick in the defensive half.
Pierre-Emerick Aubameyang (Borussia Dortmund) is shown the yellow card.
Attempt missed. Karim Benzema (Real Madrid) right footed shot from outside the box misses to the left. Assisted by Luka Modric.
Substitution, Borussia Dortmund. Pierre-Emerick Aubameyang replaces Lukasz Piszczek.
Offside, Borussia Dortmund. Robert Lewandowski tries a through ball, but Marco Reus is caught offside.
Attempt missed. Isco (Real Madrid) right footed shot from outside the box misses to the left.
Attempt saved. Karim Benzema (Real Madrid) left footed shot from outside the box is saved in the bottom left corner. Assisted by Gareth Bale.