Rangers are out of the Europa League after Steven Gerrard's side lost to Rapid Vienna. Get all the key news from Thursday's games.
Celtic scrape through
Celtic scraped into the knockout stages of the Europa League in fortuitous fashion on an evening when Old Firm rivals Rangers were dumped out of the competition.
Scottish champions Celtic, needing a draw to progress, looked to be heading out as they slipped to a 2-1 home defeat to Group B winners Red Bull Salzburg.
But they were spared an early exit as Rosenborg defender Tore Reginiussen headed a dramatic 86th-minute leveller in a 1-1 draw against Red Bull Leipzig in the other game in the group.
Brendan Rodgers' Hoops, who finished as runners-up, pulled a goal back late on through Olivier Ntcham at Celtic Park after Munas Dabbur and Stefan Lainer put the Austrian visitors in control.
Rangers bow out
Earlier on Thursday, Steven Gerrard's Rangers crashed out following a 1-0 loss to Rapid Vienna.
The Light Blues, needing to win at Rapid Vienna, lost 1-0 in Group G following an 84th-minute goal from Dejan Ljubicic.
Spanish side Villarreal took top spot in that group after goals from Samuel Chukwueze and Karl Toko Ekambi earned a 2-0 success over Spartak Moscow, with Rapid going through as runners-up.
Seven-time European champions AC Milan were also eliminated after they were beaten 3-1 by Olympiakos.
Milan could afford to lose by a single goal in Greece but Konstantinos Fortounis scored a penalty with nine minutes to go to put pressure on coach Gennaro Gattuso.
Olympiakos, who were two goals up thanks to Pape Abou Cisse and a Cristian Zapata own goal before Zapata halved the deficit, join Real Betis in progressing from Group F following the Spanish side's goalless draw with Dudelange.
Morata injured as Chelsea draw
In Hungary, Chelsea lost striker Alvaro Morata to injury and their 100 per cent record following a 2-2 draw with Vidi.
The Blues, who had already secured top spot in Group L, salvaged a point through Olivier Giroud's free-kick after Willian put them ahead with another set-piece.
Ethan Ampadu's own goal and a superb volley from Loic Nego turned the game in Vidi's favour, with Spain international Morata suffering a knee problem and being replaced at 1-1.
Belarusian champions BATE Borisov join Maurizio Sarri's side in the next round after two goals from Nikolai Signevich - who was later sent off - helped them beat Greek club PAOK Salonika 3-1.
Koscielny returns in Arsenal win
Group E winners Arsenal finished with victory after a much-changed side, including the returning Laurent Koscielny, defeated Qarabag 1-0.
Gunners striker Alexandre Lacazette's first-half strike was the difference at a subdued Emirates Stadium, with Sporting Lisbon confirmed as group runners-up ahead of their 3-0 victory over Vorskla Poltava.
More from across Europe...
Elsewhere, a brace from Wissam Ben Yedder and Ever Banega's penalty saw five-time champions Sevilla defeat 10-man Krasnodar 3-0 to clinch top spot in Group J.
Russian side Krasnodar progress as runners-up after Standard Liege could only manage a goalless draw against Akhisar Belediyespor in Turkey.
Group H winners Eintracht Frankfurt made it six wins from as many games by coming from behind to beat second-placed Lazio 2-1 in Rome.
Meanwhile, Malmo won 1-0 at 10-man Besiktas to take second spot in Group I and eliminate the Turkish club, with Belgian side Genk topping the group after thrashing Norwegian side Sarpsborg 4-0.
Rennes beat Astana to the runners-up slot in Group K with a 2-0 victory in France.
Czech club Slavia Prague were the other club to seal their place in Monday's draw after they beat Zenit St Petersburg 2-0.
Also on Thursday, there were victories for Bayer Leverkusen, Bordeaux, Apollon Limassol, Jablonec and Spartak Trnava, while Ludogorets and Zurich drew 1-1 and Anderlecht's game at Dinamo Zagreb ended goalless.