The Bahrain-Merida rider, who also won the race in 2015, dropped FDJ's Thibaut Pinot in the descent from the Civiglio hill and never looked back.
He crossed the finish line 28 seconds ahead of Julian Alaphilippe (Quick-Step Floors). Gianni Moscon (Sky), took third place after the 247km classic from Bergamo.
"Il Lombardia" is the last of five Monument (top) one-day classics in the season after Milan-San Remo, Paris-Roubaix, the Tour of Flanders and Liege-Bastogne-Liege.
"Today everyone was controlling me, [Nairo] Quintana and [Rigoberto] Uran in particular, so I had to redistribute the cards," Nibali said.
"When Pinot attacked, I let him go and I went after him 1km before the summit. Then I thought of nothing. I just went straight on and flat out.
Pinot was on the attack in the climb to Civiglio. fourth overall in the Giro d'Italia this year, he accelerated three times and only Nibali could follow.
The duo were together at the top but the Italian lived up to his reputation as the best descender in the world to open an unassailable gap.
"When I turned pro, [sport director Stefano] Zanatta told me I had downhill skills that I could use either for attacking or defending," Nibali said. "It’s still the case now. I’m 32, not 33 yet, but I feel young and strong."
Pinot then faded and took fifth place. His compatriot Alexis Vuillermoz had been demoted for an alleged foul in the final sprint but was later reinstated.
On the descent towards Lake Como some 35km from home, both Laurens De Plus (Quick-Step Floors) and Jan Bakelants (AG2R) crashed after mishandling the same corner and tumbling over the top of a barrier.
De Plus escaped without serious injury but Bakelants was diagnosed with seven rib and two lumbar fractures.
Simone Petilli (UAE Team Emirates) and Daniel Martinez (Wilier Triestina) were also victims of the same corner with the former also suffering fractures while the latter was cleared of any serious injury.