Milan were eliminated from the Europa League on goal difference after a 3-1 loss, as Olympiakos produced an outstanding performance on a memorable night in Piraeus.
Olympiakos had a chance to score within the opening minute as Pepe Reina raced from his goal to deny Miguel Ángel Guerrero after a long ball sailed over his center backs. He was later called into action to push a Konstantinos Fortounis free kick around the post.
The Greek side had the lion's share of possession in the first half but it was Milan who looked more dangerous in the final third. They lacked an end product though, with José Sá making relatively routine saves to deny Gonzalo Higuain, Patrick Cutrone and Cristian Zapata.
It was Pape Abou Cissé who broke the deadlock for the hosts at the hour mark as he headed in after a quickly taken short corner to put the game on a knife edge.
It was nearly 2-0 within minutes as Olympiakos counter attacked quickly but Reina denied Fortounis and Daniel Podence couldn't shepherd the ball past Zapata on the rebound.
Guilherme's shot then spooned up off the boot of Zapata to temporarily put Olympiakos on course for qualification, but the Colombian immediately made amends by heading in at the other end to put Milan back in pole position, even with the side down 2-1.
Olympiakos were still in the ascendancy though, and they were given a chance to restore their advantage when Ignazio Abate was penalized for holding Olympiakos substitute Bibras Natcho in the box. Fortounis stepped up to convert from the spot, putting the Greek side back on course for the last 32.
Milan pushed for the goal that would have restored its place in second, and Higuain went within inches of providing it, but it was Olympiakos who deservedly advanced.
Key Talking Points
For Milan, this performance was as much about the players who weren't playing as those who were. Injuries have hampered the progress of Gennaro Gattuso's side this season and two absences in particular were keenly felt.
One was Alessio Romagnoli, the Milan captain who hasn't played in over a month. Without his leadership and considerable presence, and with right back Ignazio Abate deputising in the center, Milan were beaten in the air far too often as Olympiakos dominated them in all departments.
At the other end, it was clear that Milan missed the attacking threat of Suso. The Spaniard had a knock so was left out of the squad for the first time since September. With five goals and eight assists, he has been Milan's most productive player this season and they lacked a cutting edge without him. Even Europa League specialist Patrick Cutrone had a subdued evening.
For the seven times European champions, this was a humiliating result. Gattuso will say that injuries played their part, but the character of the players on the pitch is something he will have to work much harder to explain.
Starting XI: Reina (6), Calabria (5), Abate (5), Zapata (7), Rodriguez (6), Kessié (6), Bakayoko (5), Çalhanoğlu (4), Castillejo (5), Higuain (5), Cutrone (6).
Substitutes: Laxalt (N/A), Halilovic (N/A).
Star Man - Cristian Zapata nearly scored in the first half with a powerful header and it was his crucial intervention which prevented Daniel Podence from scoring an all-important second for Olympiakos when the momentum was with the home side.
The own goal was unfortunate, but he immediately made amends by scoring at the other end, putting Milan back in the ascendancy. It was his center-back partner Abate who let him down in the end.
Worst Player - It wasn't a great night for Hakan Çalhanoğlu, who set the tone for his performance in the first half when he misplaced a pass and was then booked after a frustrated tackle in his attempts to win it back. Many of Milan's most promising attacks ended with the Turk's poor decision making.
Starting XI: José Sá (7), Elabdellaoui (6), Cisse (8), Vukovic (7), Koutris (6), Camara (7), Guilherme (6), Fetfatzidis (6), Fortounis (8), Podence (6), Guerrero (7)
Substitutes: Natcho (6), Torosidis (N/A), Bouchalakis (N/A)
Milan will aim to get back to winning ways in the league when they travel to relegation-threatened Bologna in Serie A next Tuesday.
Olympiacos will attempt to revive their stuttering league campaign when they host Lamia on Sunday. They will learn their Europa League opponents in next Monday's draw.