APOEL go through after stalemate at Zenit
The Cypriot champions continued their dream run by withstanding a furious onslaught from the home side to collect the point they needed to secure their passage into the last 16 with a game to spare.
APOEL's Serbian coach Ivan Jovanovic hailed his team's historic achievement.
"This is a fantastic result for our team. Of course, we're a small team compared to many European giants but we have a big heart," he told reporters.
"We have good players who try hard every single game and they also have a great desire to achieve something really important. I think these factors have been the key to our success on the pitch."
APOEL, who have beaten Zenit and Porto in a dream campaign, remain the only unbeaten team in the group and have nine points.
Even if they were to lose their final game at home to Shakhtar Donetsk they are still guaranteed a top-two spot because of their superior head-to-head record against Zenit and Porto.
German referee Felix Brych was forced to halt the game for several minutes late in the first half after Zenit supporters lit flares and the pitch became enveloped with heavy smoke.
The match was interrupted again shortly after the interval for the same reason and Brych decided to continue only after Zenit's Italian coach Luciano Spalletti and midfielder Roman Shirokov appealed to the fans to stop their fireworks.
"The ref had told us that if this was to happen again he would cancel the game and we would get a technical 3-0 defeat," Shirokov told Russian television NTV Plus.
"I tried to explain that to the fans but my pleas were falling on deaf ears. They are real idiots, what else can you say?" added the outspoken Russia international, who boldly predicted victory for his team and also dismissed APOEL as nothing more than pretenders before the match.
"As for the game, APOEL defended really well. They were very compact at the back. We tried to break their defence with quick passes but the [soggy] pitch didn't help us."
After the smoke had cleared, the home side kept on pushing forward in search of a goal but the delay seemed to disrupt their flow.
Zenit, missing injured striker Alexander Kerzhakov, the leading scorer in the Russian league this season, wasted numerous chances, Shirokov and lanky forward Alexander Bukharov being the biggest culprits.
Shirokov missed twice with the goal at his mercy and Bukharov headed against the crossbar midway through the second half.
With influential Portugal playmaker Danny struggling to shake off a knee injury, the Russian champions were missing that decisive final pass.
At the other end, the visitors rarely threatened Zenit keeper Vyacheslav Malafeyev, and lone Brazilian striker Ailton was substituted midway through the second half.
The referee added more than 10 minutes of stoppage-time because of the delays but the Cypriots held on to continue their run of not conceding more than one goal in their last 17 European games.