Arsenal beat Porto on penalties to progress through to the Champions League quarter-finals after a 1-0 win at the Emirates Stadium, which levelled the tie at 1-1 on aggregate.
Leandro Trossard broke the deadlock with a cool finish after a sublime turn and pass from Martin Odegaard four minutes before the interval.
But Arsenal could not build on their lead against a well-drilled and streetwise Porto side and the closest they came was when Odegaard's goal was ruled out for a foul by Kai Havertz on defender Pepe.
With the tie level on aggregate after 90 minutes, the game went to extra time and penalties.
Left-back Wendell struck the post after David Raya’s save and he also denied Galeno as Arsenal won 4-2 in the shootout.
Here's how we rated the Arsenal players...
David Raya 8
The hero on penalties, saving from Wendell and Galeno and almost keeping out Marko Grujic’s effort. Made smart saves from Evanilson and Francisco Conceicao in normal time, and was composed with his feet.
Ben White 8
Good in possession, inverting into the midfield when Arsenal had the ball, and solid defensively.
William Saliba 7
Booked for a clumsy foul in the first half and perhaps a little lucky to avoid a second yellow for grappling with Evanilson late on. Helped to keep Porto at bay.
Gabriel 7
Battled hard and made a number of important interventions at the back. Used the ball well.
Jakub Kiwior 8
Dealt impressively with the threat of Conceicao, the Porto manager's son, in his biggest game and probably best performance for the club.
Jorginho 6
Used his experience in the midfield battle but never produced any killer passes to unlock stubborn Porto.
Declan Rice 7
Caught the eye with some excellent switches of play but not able to impose himself on the game in his usual fashion. Never stopped working, and scored his penalty.
Martin Odegaard 8
The game's standout player. His assist for Trossard was sublime and he knitted everything together for Arsenal in the final third.
Should have hit the target late on when Diogo Costa parried Saka's shot to his feet. Took his penalty well.
Bukayo Saka 6
Well marshalled by the excellent Wendell but twice had shots parried by Diogo Costa. Grew in prominence later in the game but overall quiet by his high standards. Scored from the spot.
Kai Havertz 6
Shackled by a canny Porto back line and did not make a major impression on the game at centre-forward, aside from the foul on Pepe which led to Odegaard's goal being ruled out.
Moved back into midfield when Jesus came on and scored a cool penalty in the shootout.
Leandro Trossard 7
Broke the deadlock with an excellent finish across the goalkeeper but only showed glimpses of his threat down the left flank.
Subs
Gabriel Jesus (Jorginho 83') 7
Made things happen and nearly scored immediately when his effort was saved by Diogo Costa.
Oleksandr Zinchenko (Kiwior 105') 6
Struggled to get up to speed and carelessly gave away a corner shortly after his introduction.
Eddie Nketiah (Trossard 105') 6
Had a shot blocked in extra time.
Not used: Ramsdale, Hein, Partey, Smith Rowe, Cedric, Tomiyasu, Vieira, Nelson, Elneny.