Sevilla won 2-1 at home to Maribor of Slovenia, goals from Jose Antonio Reyes and Kevin Gameiro helping them complete a 4-3 aggregate win.
Dare Vrsic pulled one back in stoppage time for the visitors, but it did not affect the tie.
Betis claimed an impressive 2-0 win at Rubin Kazan to go through 3-1 on aggregate.
Nono put the visitors ahead on the stroke of half-time and Ruben Castro grabbed a second shortly after the hour mark.
Napoli and Porto both survived scares to set up a clash in the next round, with the Italians winning 3-1 at home to Swansea following a goalless first leg.
Porto came from 2-0 and 3-2 down to draw 3-3 at Eintracht Frankfurt and advance on away goals after the tie ended 5-5 on aggregate.
The Germans led 2-0 following a goal either side of half-time from Stefan Aigner and Alexander Meier, but the visitors responded through an Eliaquim Mangala brace.
Meier struck again to put Eintracht back in pole position to progress, but substitute Nabil Ghilas' 86th-minute goal turned the tie back in the Portuguese side's favour.
Elsewhere, two sides who came into the competition from the Champions League fell by the wayside as Shakhtar Donetsk and Ajax crashed out.
Shakhtar went down 2-1 at home to Viktoria Plzen, first-half goals from Daniel Kolar and Milan Petrzela putting the Czechs in charge.
Luiz Adriano's 89th-minute consolation meant it finished 3-2 to Plzen on aggregate.
Ajax were as good as out following their 3-0 home defeat to Salzburg and things got little better for them in the second leg as they lost 3-1.
The Austrians scored three second-half goals through a Mike van der Hoorn own goal, Sadio Mane and Jonathan Soriano. Davy Klaassen grabbed a late consolation for Ajax.
Salzburg play Basel in the last 16 after the Swiss side won 3-0 at home to Maccabi Tel-Aviv with a Valentin Stocker strike and a Marco Streller brace earning them an easy win.
Lazio were beaten 4-3 on aggregate by Ludogorets Razgrad after they threw away a two-goal lead and conceded an 89th-minute equaliser in a 3-3 draw in Bulgaria.
The Romans looked to have turned around their home-leg deficit when goals from Keita Balde, who scored inside the opening 18 seconds, and Brayan Perea after 54 minutes put them 2-0 up on the night.
Roman Bezjak and Hristo Zlatinski brought it back to 2-2, only for Miroslav Klose to put Lazio back in front after 83 minutes.
But 85th-minute substitute Juninho Quixada struck four minutes after coming on to put Ludogorets through.
Juventus sent up a last-16 meeting with Serie A rivals Fiorentina. Antonio Conte's men won 2-0 in Turkey at Trabzonspor thanks to first-half goals from Arturo Vidal and Dani Osvaldo to seal a 4-0 aggregate victory.
La Viola also held a healthy lead from the first leg against Esbjerg, 3-1, and completed the job with a 1-1 home-leg draw.
Josip Ilicic scored a free-kick early in the second half and Mikkel Vestergaard's well-taken stoppage-time goal was mere consolation.
Benfica found things far easier at home to PAOK Salonika, winning 3-0 to go with their 1-0 success in Greece.
A sending-off also proved pivotal in Lisbon, Konstantinos Katsouranis seeing red for PAOK in the 69th minute.
Nicolas Gaitan put Benfica ahead a minute later, Rodrigo Lima adding a second from the spot in the 79th minute and Lazar Markovic adding another a minute after. They face Tottenham next.
Valencia booked a tie with Ludogorets, a 0-0 draw at home to Dynamo Kiev sending them through 2-0 on aggregate.
Lyon won 1-0 at home to Chornomorets to set up a tie with Plzen thanks to a Alexandre Lacazette goal.
The final last-16 tie will be between AZ Alkmaar and Anzhi Makhachkala.
AZ, 1-0 up from the first leg against Liberec, went through after a 1-1 home draw, while Anzhi won 2-0 at Genk.