Karim Benzema scored twice for Real Madrid, including his club's 1000th European Cup goal
Liverpool and Ajax kept up their perfect records in the Champions League this season to qualify for the last 16 on Wednesday, while a Paris Saint-Germain side missing Lionel Messi were held by RB Leipzig.
Jurgen Klopp's Liverpool blew Atletico Madrid away in a whirlwind start at Anfield, with Diogo Jota and Sadio Mane scoring in the first 21 minutes to secure a 2-0 win against opponents who finished with 10 men.
Atletico's Brazilian defender Felipe was sent off for a foul on Mane before half-time, as the 2019 Champions League winners made it four wins out of four in Group B.
Liverpool are now guaranteed to top the group, sitting seven points clear of Porto with two games remaining, while Atletico are another point back in third.
"You earn a lot of money to win Champions League games. The first target was to get through this group but we did it with two games to go," Klopp told BT Sport.
"I didn't expect we would be through after four games but the boys did it and it's really well-deserved."
Porto drew 1-1 away to AC Milan, as Chancel Mbemba's own goal at San Siro cancelled out Luis Diaz's early opener for the Portuguese side.
It was a first point in the group for seven-time former European champions Milan, who maintain a slim chance of reaching the knockout phase in their first appearance in the competition since 2013-14.
Ajax continued their marvellous run in Europe this season by coming from behind to win 3-1 at 10-man Borussia Dortmund as Sebastien Haller scored his seventh goal in just four Champions League appearances.
A Dortmund side missing the injured Erling Haaland had Mats Hummels harshly sent off before the half-hour mark after he slid in on Ajax's Brazilian winger Antony.
However, English referee Michael Oliver then awarded Dortmund a penalty for a foul on Jude Bellingham following a VAR review, and Marco Reus converted from 12 yards.
Yet Ajax equalised in the 72nd minute as Dusan Tadic nipped in at the back post to score.
Ivory Coast striker Haller then headed in Antony's cross, becoming the first player to score in each of his first four Champions League appearances since Haaland in 2019.
Davy Klaassen wrapped up the win from another Antony assist in stoppage time, meaning Erik ten Hag's Ajax have scored 14 goals in winning all four games so far in Group C.
"We want to annoy Europe's elite teams. We're not saying we are favourites, but nobody wants to get Ajax in the draw," Ten Hag told broadcaster DAZN.
Ajax will go through with either Dortmund or Sporting Lisbon, the Portuguese side boosting their hopes by crushing Besiktas 4-0.
Pedro Goncalves scored twice in the first half including a penalty, while Paulinho and Pablo Sarabia also struck for Sporting.
Besiktas, who had Brazilian midfielder Souza sent off, are eliminated.
Messi missed PSG's trip to Germany due to injury, and without him Mauricio Pochettino's side came from behind to lead before conceding a late penalty and settling for a 2-2 draw.
Christopher Nkunku headed Leipzig in front before Andre Silva had a 12th-minute penalty saved.
Kylian Mbappe set up Georginio Wijnaldum to equalise midway through the first half and the Dutchman headed in another before the break, the goal standing despite initially being flagged offside.
However, a Presnel Kimpembe foul was spotted after a VAR review in the last minute and Dominik Szoboszlai scored from the spot to make it 2-2.
"We are disappointed, but our objective remains to win the group and qualify," said Pochettino.
Leipzig are eliminated despite the draw, while Manchester City move above PSG to the top of Group A thanks to their 4-1 home win against Club Brugge.
Phil Foden's opener was cancelled out by a John Stones own-goal, but Riyad Mahrez, Raheem Sterling and Gabriel Jesus all scored in the second half for City.
Real Madrid are two points clear of Inter Milan at the top of Group D after Karim Benzema netted twice in a 2-1 win over Shakhtar Donetsk.
Benzema's opener was Real's 1000th European Cup goal and the Frenchman got the winner after Fernando had brought Shakhtar level.
Inter won 3-1 at Sheriff Tiraspol, with Marcelo Brozovic, Milan Skriniar and Alexis Sanchez all on target in the second half before Adama Traore pulled one back.