Atletico Madrid missed the chance to book their spot in the last 16 after they were held to a 1-1 draw by a second-string Bayern Munich side in the penultimate of Group A at Wanda Metropolitano.
Joao Felix got the opener for Atletico in the 26th minute but Thomas Muller snatched the equaliser for the Bavarians in the last four minutes from the penalty spot.
Inter Milan revived their hopes of reaching the round of 16 after throwing Group B wide open with a 3-2 victory over Borussia Monchengladbach at Borussia-Park.
Romelu Lukaku scored twice in the second stanza for Inter while Matteo Darmian scored what proved to be the decisive goal in the first stanza.
Alassane Plea also scored a brace for Monchengladbach but also had another goal disallowed, as Inter held on for the win.
Manchester City secured top spot in Group C after playing to a goalless draw with Porto at Estadio do Dragao.
After a goalless first stanza, Gabriel Jesus thought he had netted the winner for Man City in the last ten minutes after scoring into an empty net from a rebound but the goal was disallowed for offside by the Video Assistant Referee (VAR).
Porto have also qualifed for the next round with the point gained on Tuesday evening.
Olympique Marseille revived their hopes for a place in the UEFA Europa League after beating Olympiakos 2-1 from behind in the penultimate Group C clash at Stade Velodrome.
Mady Camara broke the deadlock for Olympiakos in the first stanza but Dimitri Payet netted a brace in the second stanza to snatch the first victory for Marseille.
Atalanta scored late to salvage a crucial 1-1 draw against Midtjylland and remained in second place in the penultimate of Group D at Gewiss Stadium.
Alexander Scholz gave Midtjylland a shock early lead but Cristiano Romero found the equaliser in the last 11 minutes for Atalanta.
The Italian side will face Ajax Amsterdam in the final group match, with both sides looking to snap up second spot in the group.