Manchester City staged a superb comeback to end Bayern Munich's record run of 10 consecutive Champions League wins but they still finished as Group D runners-up behind the German champions.
Bayern were dominant early on as Thomas Muller struck from Dante's pass before Mario Gotze scored following a corner.
David Silva pulled a goal back from close range after Jesus Navas's cross.
Aleksandar Kolarov equalised with a penalty after James Milner was tripped before Milner's fine finish won it.
Bayern suffer Brit panic
Bayern's last three home defeats in European competition have come against English clubs - Manchester City, Arsenal and Chelsea
It was an amazing turnaround from Manuel Pellegrini's side, who almost earned the 4-2 victory they needed to go through as group winners as Alvaro Negredo had a late effort saved by Bayern goalkeeper Manuel Neuer.
But after Bayern scored twice in the opening 12 minutes, the fact City fought back to claim an unexpected victory will give them confidence as they progress to the last 16 for the first time.
Although Bayern and City both finished with 15 points, the German side's 3-1 win during the first group game in Manchester meant their better goal difference proved crucial.
Both teams had already qualified before this game but Bayern boss Pep Guardiola was clear that finishing second in the group - and thus facing a seeded team in the first knockout round - was "not an option".
But his team looked vulnerable as they suffered only their third defeat of 2013 with Silva and Milner excellent throughout.
It started with the Germans in imperious form as City looked nervous after an early a mix-up between Joleon Lescott and recalled goalkeeper Joe Hart.
And after five minutes the visitors were undone as Dante's diagonal pass caught Kolarov napping and Muller nipped in behind the City captain to finish past Hart.
Hart had to save Dante's header and turned Ribery's effort onto the post after another Lescott mistake before Bayern went 2-0 up from the resulting corner.
Mario Mandzukic had time to shoot towards goal and his effort found Gotze, who also had space to stroke the ball past Hart from close-range.
By this stage, the only question was how many goals Bayern would score. Hart had made four touches, and two of them were to pick the ball out of the net.
Matters appeared to worsen when Micah Richards was replaced at right-back by Pablo Zabaleta after pulling a hamstring but the introduction of the experienced Argentine seemed to galvanise the visitors.
How could City have finished top?
When teams finish level on points in the Champions League, group positions are decided by head-to-head records - NOT goal difference
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.