Unai Emery's men imploded in the final stages as Thiago Motta and Angel Di Maria saw red, ultimately succumbing to a result which leaves them trailing Monaco - who have a game in hand - by three points, with PSG having just three matches left.
Trailing 2-1 in the final minute, Motta was dismissed for a headbutt on Paul Baysse, before Anastasios Donis' header made the game safe for Nice, Di Maria then earning a straight red for reckless lunge on Arnaud Souquet.
The breathless finish was in keeping with much of what had gone before, although the drama did not outweigh the quality - evidenced by Nice's excellent opening goal as Mario Balotelli capped off a lovely move with an emphatic finish from 20 yards.
Ricardo Pereira, instrumental for the first, made PSG's task even tougher shortly after the interval with a wonderful strike, but Marquinhos did at least give the visitors a ray of hope in the 64th minute, marking the beginning of their late siege on the Nice goal.
PSG grew increasingly desperate, however, and the indiscipline of Motta and Di Maria either side of Donis' intervention means it looks increasingly likely the Ligue 1 title will leave Paris for the first time since 2012.
It was the four-time defending champions who shaded the early exchanges and looked every inch a side that knew they had to win, following Monaco's 3-1 success over Toulouse a day prior.
They almost made the most of an early Yoan Cardinale error to take the lead, as the goalkeeper fumbled a Di Maria effort at the feet of Edinson Cavani, but Dante got there first to clear the danger.
Di Maria was involved again in the 17th minute, whipping a fine corner into the box and Cavani headed it goalwards, only for Jean Seri to clear in front of the line.
Nice had been very prominent in possession, though, and eventually they combined brilliantly to take the lead in the 26th minute.
Pereira terrorised Maxwell on the right flank before squaring across the edge of the box to Balotelli, who held off Marco Verratti and slammed a left-footed effort into the bottom-left corner.
PSG were forced into a change at the break, with Thomas Meunier replacing the injured Maxwell and the resulting reshuffle saw Serge Aurier move to left-back.
But the Ivorian could deal no better with Pereira than Maxwell and the winger gave PSG a mountain to climb just after the break, cutting in from the right and curling a sumptuous effort into the top-left corner via the upright.
Cavani saw another header from a Di Maria corner kept at bay shortly after, with Cardinale producing a stunning save.
Cardinale was helpless just after the hour mark, though, as Silva met Di Maria's out-swinging corner and Marquinhos helped the ball over the line with a deft header.
That goal was the start of an intense PSG onslaught in which Nice struggled to ease the pressure and they had to rely on Cardinale 15 minutes from the end, as he pushed away a Silva header.
But PSG's frustrations were laid bare as Motta was first dismissed for an off-the-ball clash with Baysse in the Nice area before Donis finished off the visitors on the break.
Di Maria's wild late tackle on Souquet summed up the magnitude of PSG's implosion as Nice closed to within three points of the Parisians, whose title defence was left in tatters.
Key Opta stats:
- Nice found the net with each of their three shots on target against Paris Saint-Germain.
- Mario Balotelli has found the net in nine of his 10 starts at the Allianz Riviera in Ligue 1 (12 goals), failing to do so only against Lyon in October 2016.
- With 14 goals scored in Ligue 1 2016-17, the Italian striker has equaled his highest tally in a single league season (alongside 2013-14, with AC Milan).