Esteban Chaves (Orica-GreenEdge) moved into the maglia rosa after finishing 50 seconds behind the Italian and over four minutes ahead of Steven Kruijswijk (LottoNL-Jumbo) on the summit finish to Risoul, who suffered a miserable day at the Giro d'Italia and slipped to third, 1-05 behind Chaves.
Nibali now sits 44 seconds off Chaves ahead of the final mountain stage and 1-04 ahead of Alejandro Valverde (Movistar) in fourth after he finish 2-14 down on the stage.
The action really kicked off on the stage on the Cima Coppi climb, the highest point in this year's Giro, on the slopes of the Colle Dell'Agnello.
A 28-man break had finally got away after around 70km of riding, and it was Nibali's teammate Michele Scarponi who took the prize after cresting the summit first.
But Scarponi's presence up front would be a help for his compatriot later on, with Chaves the first to attack towards the summit and only Kruijswijk and Nibali able to follow as Valverde and Rafal Majka (Tinkoff) suffered.
But the gaps weren't huge and the GC contenders were more or less together as they began the descent down the French side of the climb.
Kruijswijk though, may look back and say that was the moment he lost the Giro d'Italia. The race leader was unable to control his bike on a corner on the snowy descent and went flying into the snow drift on the right hand side of the road.
Ilnur Zakarin (Katusha) was another GC contender to suffer on the descent, going off the edge of the road and suffering a collarbone injury, abandoning the race.
With damage to his bike and his team car some way back down the climb, there was nothing the Dutchman could do but try and catch Nibali and Chaves without all his gears available and the pair over 30 seconds ahead.
Eventually he was able to get a bike change but looked to have some job on his hands to catch his rivals.
As the Nibali group hit the final climb, Scarponi and the rest of the reaming break were caught and he was able to put some work in to help his team leader get away on the final climb.
Maxime Monfort (Lotto-Soudal) who was the only rider left out front from the break on his own, was then caught and passed by Chaves and Nibali as they got away from Valverde, Majka and Rigoberto Uran (Cannondale).
The leaders then quickly went to a minute ahead of that group, with Sky's Mikel Nieve latching on in the hunt for a second stage win. Kruijswijk, who was without and teammates, looked to be suffering on the category one climb to Risoul and began leaking time and his lead to the pair up front.
With 5km to go on the 12km finishing climb, Colombian Chaves began to fade and 2013 Giro winner attacked. That increase in pace saw Valverde move two minutes back and Kruijswijk to almost four minutes.
Chaves was able to hold the gap that Nibali had put into him, and eventually rolled in after Nieve 53 seconds behind the Italian champion who took his first Giro victory since 2013.
With Valverde finishing 2-14 down on the winner, and Kruijswijk fighting to get in at 4-54, it means Chaves now heads into the final mountain stage of the Giro with a 44 second lead ahead of Nibali.
The final GC battle will take place over four categorised climbs to Sant’Anna di Vinadio on stage 20, with a category three summit finish on the 132km route shortly after a the category one Colle Della Lombarda.
2016 Giro d'Italia stage 19, Pinerolo - Risoul (162km)
1. Vincenzo Nibali (Ita) Astana, in 4-19-54
2. Mikel Nieve (Esp) Team Sky, at 51s
3. Esteban Chaves (Col) Orica-GreenEdge, at 53s
4. Diego Ulissi (Ita) Lampre-Merida, at 1-02
5. Rafal Majka (Pol) Tinkoff, at 2-14
6. Alejandro Valverde (Esp) Movistar, at 2-14
7. Rigoberto Uran (Col) Cannondale, at 2-14
8. Georg Preidler (Ger) Giant-Alpecin, at 2-43
9. Nicholas Roche (Ire) Team Sky, at 2-51
10. Hubert Dupont (Fra) Ag2r La Mondiale, at 2-51
14. Bob Jungels (Lux) Etixx-Quick Step, at 3-45
16. Steven Kruijswijk (Ned) LottoNL-Jumbo, at 4-54
Overall classification after stage 19
1. Esteban Chaves (Col) Orica-GreenEdge, in 78-14-20
2. Vincenzo Nibali (Ita) Astana, at 44 secs
3. Steven Kruijswijk (Ned) LottoNL-Jumbo, at 1-05
4. Alejandro Valverde (Esp) Movistar, at 1-48
5. Rafal Majka (Pol) Tinkoff, at 3-59
6. Bob Jungels (Lux) Etixx-Quick Step, at 7-53
7. Andrey Amador (CRC) Movistar, at 9-34
8. Rigoberto Uran (Col) Cannondale, at 12-18
9. Kanstantin Siutsou (Blr) Dimension Data, at 13-19
10. Domenico Pozzovivo (Ita) Ag2r La Mondiale, at 14-11
Thank you for reading 5 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1