Two-goal Robert Lewandowski was the Bayern hero as they fought back to win 2-1 at PSV Eindhoven and coasted into the knockout stages with two games to spare. Borussia Mönchengladbach were held to a home draw by Celtic.
PSV Eindhoven 1-2 Bayern Munich
(Arias 14', Lewandowski 34' pen., 74')
Bayern recovered from a spate of bad luck in Eindhoven on Tuesday night to charge into the Champions League last 16 and qualify from Group D.
First Robert Lewandowski struck the crossbar for the visitors following a fairly pedestrian start to the game and then PSV went ahead after a major officiating blunder.
Santiago Arias nodded in from close range after Manuel Neuer saved Davy Pröpper’s header, but the scorer was clearly offside. However, Neuer's frantic protests fell on deaf ears.
Bayern lacked a little bit of bite in midfield with Thiago Alcantara, who had started the last five games, left out because of a knock. The German champions kept on probing, but misfortune again denied them with Lewandoswki again hitting the woodwork with a header on the half-hour mark.
Their luck finally turned four minutes later when the ball flicked up off Joshua Kimmich and clipped Andrés Guardado's hand, prompting the referee to award a debatable penalty.
Lewandowski coolly converted from the spot to give Carlo Ancelotti's men a deserved leveler. They almost went in at the break in front, but the Poland striker spurned a half chance and Arturo Vidal missed an even better opportunity from close range.
Bayern, who beat PSV 4-1 at home last time out in the Champions League, continued to push after the interval. Arjen Robben did not quite have the impact he would have liked on his return to Eindhoven, but was applauded off by both sets of fans when substituted in the second period.
His replacement, Douglas Costa, helped create the winner. He played in David Alaba who crossed for the relentless Lewandowski to prod in after 74 minutes. Bayern's top scorer almost completed a delightful hat trick, but he was denied by the woodwork for a third time as his flick hit the crossbar.
Although Bayern are second in the group on nine points to Atletico's 12, they go through alongside the Spaniards with both Rostov and PSV on just one. The battle to finish top is now on in the final two group games, with Bayern next at Russians Rostov on November 23.
"We fought our way back into the game and deserved to get the win," Ancelotti told reporters afterwards.
Borussia Mönchengladbach 1-1 Celtic
(Stindl 32', Dembele 76' pen.)
Gladbach looked to be in control from the off at Borussia Park but carelessly let Celtic back into the game as Group C remained open.
Celtic, beaten 2-0 at home by the Germans last month, rarely threatened early on, but did cause a scare when Scott Sinclair struck the post with a curling effort midway through the first half.
Gladbach’s class shone through in the first half when playmaker Thorgan Hazard, returning to the starting lineup for the first time in almost a month following from a knee problem, set up the opener. His cross was expertly swept home by captain Lars Stindl.
Gladbach, whose topsy turvy season saw them held at home last Friday by Eintracht Frankfurt in the Bundesliga, initially showed they had benefited from an extra day's rest with an energetic and at times inventive display.
But it suddenly all went wrong 15 minutes from time when Julian Korb grappled with Moussa Dembele in the box, conceding a penalty and receiving a straight red card for denying a clear goal scoring opportunity.
Dembele dispatched the penalty for a barely deserved equalizer for the Scots, especially after Andre Hahn had hit the frame of the goal 10 minutes earlier. The hosts could even have lost it, with Callum McGregor going close for Celtic late on.
Manchester City's 3-1 home win over Barcelona does not help Gladbach’s hopes of finishing second, but they still have a chance with two games left. Barca have nine points, City seven, Gladbach four and Celtic two. Gladbach are at home to City on November 23.
Tuesday's other Champions League results:
Ludgorets 2-3 Arsenal (Arsenal go through)
Basel 1-2 Paris St Germain (PSG go through)
Besiktas 1-1 Napoli
Benfica 1-0 Dynamo Kiev
Manchester City 3-1 Barcelona
Atletico Madrid 2-1 Rostov (Atletico go through)