PSG enjoyed greater possession than their opponents in the first half, but Olympiacos striker Kostas Mitroglou posed problems for Les Parisiens throughout the opening 45 minutes.
The Greek forward almost equalised moments later, but his effort was thwarted by Salvatore Sirigu.
Cavani came close to adding a second goal, when his well-struck shot forced a good save out of the Olympiacos keeper.
However, the visitors were given hope as Marco Veratti picked up a second yellow card just 20 seconds after the interval, which led the hosts to sacrifice the attacking threat of Ezequiel Lavezzi in order to stabilise the midfield.
Despite the sending-off, Ibrahimovic almost doubled PSG's lead moments later when his fizzing free kick was somehow kept out by Roberto.
However, the Greek outfit managed to find an equaliser with 10 minutes remaining after a corner kick arrived at the feet of Kostas Manolas who tucked the ball home, although replays suggest the player strayed offside.
It was left to Cavani to snatch the three points for Les Parisiens when he toe-poked the ball into the corner of the net, after sprinting onto Adrien Rabiot's pass.
Olympiacos are now level on points with Benfica, who came from behind to beat Anderlecht in Brussels, going into the final group games next month.