Roma's hopes of Champions League football were ended by self-inflicted wounds as a nine-man side were beaten 3-0 at home by Porto.
Porto snatched the lead eight minutes in through Felipe's header, making it 2-1 on aggregate, but Roma's night would get worse.
Daniele De Rossi saw red in the 39th minute after lunging in on Maxi Pereira.
Luciano Spalletti shuffled the pack to bring on Emerson Palmieri in his place, but the Brazilian hardly vindicated the decision when he was sent off five minutes into the second half for another poor challenge.
There was little hope for the remaining nine men, and their exit was confirmed when Porto scored twice in the space of three minutes.
First Miguel Layun completed a swift counter-attack, rounding Wojciech Szczesny before slotting home, and then Jesus Corona made it 4-1 on aggregate after 75 minutes, beating Kostas Manolas before firing beyond Szczesny.
Ludogorets progressed with a 4-2 aggregate win over Viktoria Plzen after a 2-2 draw in the Czech Republic.
Plzen, trailing 2-0 from the first leg, struck early to boost their hopes of a comeback as Michal Duris scoring from close range after a corner.
But 10 minutes later, Virgil Misidjan's powerful shot dealt the hosts a huge blow, and though Ales Mateju put them ahead again on the night in the 64th minute, the tie was beyond them even before Claudiu Keseru's curling effort five minutes into time added on.
Monaco's progress was more routine as a stoppage-time penalty gave them a 1-0 win over Villarreal and a 3-1 aggregate win.
It had been a match of little incident before Mateo Musacchio's late handball gifted Fabinho the chance to score from the spot.
Celtic survived a major scare as they lost 2-0 away to Hapoel Be'er Sheva but advanced 5-4 on aggregate.
Hapoel Be'er Sheva had already seen Maharan Radi's 15th-minute penalty saved by Craig Gordon when they took the lead on the night through Ben Sahar's header in the 21st minute.
But they really got Celtic's attention three minutes into the second half when a routine cross from the left caused a mix-up between Gordon and defender Saidy Janko, and Ovidiu Hoban gratefully turned the ball home.
Given their away goals from the first leg, one more would have sent the hosts through but despite their best efforts in a frantic finish Celtic hung on.
Dundalk had hopes of causing an upset of their own as they took the lead against Legia Warsaw and then found themselves playing against 10 men, but Michal Kucharczyk's last-minute equaliser saw it end 1-1 on the night and 3-1 to Legia on aggregate.
Trailing 2-0 from the opening leg, few gave the Irish minnows much chance in the Polish capital, but their fortunes changed when Robert Benson thundered home a fine effort in the 19th minute - his unstoppable volley finding the top corner after David McMillan headed down Sean Gannon's cross.
Their prospects improved further in the 67th minute when Adam Hlousek earned a second yellow card for pulling back an opponent, leaving Legia with 10 men.
But as Dundalk piled forward in the closing stages, Legia punished them on the counter-attack and Kucharczyk fired a powerful shot home.