Romelu Lukaku kept Inter Milan's hopes of reaching the Champions League last 16 alive, with qualification from a Group B that includes stuttering Real Madrid going to the final matchday.
Lukaku struck twice in the second half to steer Inter to a 3-2 win at Borussia Moenchengladbach on Tuesday to set up a thrilling finale.
Alassane Plea had cancelled out Matteo Darmian's 17th-minute opener in first-half stoppage time but Lukaku fired home to restore Inter's 2-1 lead in the 64th minute and then tapped in his second goal nine minutes later to make it 3-1.
Plea cut the deficit in the 76th before but had an 84th-minute effort ruled out for offside by VAR, meaning Inter - on five points - could still progress with a win over Shakhtar Donetsk.
Gladbach are top with eight points from five games, one ahead of Shakhtar and Real Madrid after the Ukrainians - who went second by virtue of their head-to-head record - beat the visiting Spaniards 2-0.
Bruno Dentinho finished off a Shakhtar counter-attack in the 57th minute, pouncing as Raphael Varane dithered, and then Manor Solomon was allowed to drive from halfway before striking a late second (82) as the Ukrainians completed a stunning double over the European heavyweights.
All four teams will battle to reach the last 16 on Wednesday December 9.
- Real in trouble after Shakhtar defeat
- Champions League last 16: Draw, dates, teams
- Champions League news | Fixtures | Tables
Atletico made to wait
Atletico Madrid face a nerve-wracking final game to ensure they reach the Champions League knockout stage after they could only draw 1-1 at home to a much-changed Bayern Munich side.
Atleti looked on course for a comfortable victory when Joao Felix put them in front in the 26th minute, appearing at the near post to knock in a cross from Marcos Llorente.
But Diego Simeone's side were unable to add to their lead against Bayern, who rested most of their first-team regulars after qualifying as group winners last week.
And Atletico were made to pay for their conservatism when substitute Thomas Muller beat goalkeeper Jan Oblak from the spot in the 86th minute after being felled by defender Felipe.
Atletico are second in Group A with six points and to qualify they now must avoid defeat in their final game at RB Salzburg, who are in third place with four points.
A first-half brace by Mergim Berisha helped earn Salzburg a 3-1 win at Lokomotiv Moscow as the Austrian champions kept their own hopes alive.
Salzburg were rewarded for their early domination in the 28th minute when Enock Mwepu's deflected shot fell kindly to Berisha, who converted from close range. Jesse March's side doubled their lead 13 minutes later when Sekou Koita capitalised on a poor clearance from Slobodan Rajkovic and played in Berisha.
Lokomotiv were handed a lifeline in the 79th minute when Ze Luis was fouled by Andre Ramalho in the penalty area, with Anton Miranchuk converting the resulting spot-kick to halve the deficit.
But substitute Karim Adeyemi restored Salzburg's two-goal lead two minutes later to set up a decisive clash with Atletico.
Porto joined Manchester City in advancing to the next phase of the Champions League after the two played out a goalless draw in their Group C clash on Tuesday.
The point, combined with defeat for Olympiakos in France, was enough to ensure Porto finished second while City, who had already qualified last week, are assured of top place.
But Pep Guardiola's team surrendered their 100 per cent record in the group despite dominating their hosts as they set up a myriad of chances but proved unable to make the breakthrough.
In the group's other game, Cristian Romero's late equaliser secured a potentially precious point for Atalanta in a hard-fought 1-1 draw with Danish side Midtjylland.
Defender Alexander Scholz had put the visitors ahead early on and they were within 11 minutes of a first victory in Europe's elite club competition, but Romero's header provided just reward for Atalanta following incessant pressure in the closing stages.
They move to eight points in the group and go to Ajax in the final round of matches next week needing only a draw to secure a place in the round of 16, with the Dutch club one point behind them.
- Champions League last 16: Who's made it?
- Download the Sky Sports Scores App: Apple | Android
- The UK's No 1 scores app: Find out more
Manchester City will finish top of Group C, but were held to their first-ever goalless draw in the Champions League group stages by Porto, who have also qualified for the last 16.
City had more clear-cut chances after half-time and thought they had secured three points when Gabriel Jesus (80) poked home from yet another Agustin Marchesin save late on, but VAR ruled the goal out for a Rodri offside in the build-up.
Elsewhere, Olympiakos slumped to a 2-1 defeat at Marseille.
The Greek side went ahead in the first half through Mady Camara, only for Dimitri Payet to score two penalties after the break to give OM their first win and their first goals in the competition this season.