Rosberg leapt from his car at the end of the race and celebrated with the Mercedes team
The German controlled the race from the start, with the new world champion only a couple of seconds behind but unable to get close enough to challenge.
Rosberg’s fourth win of the season moved him back into second in the championship ahead of Ferrari’s Sebastian Vettel, who crashed out.
Williams’ Valtteri Bottas took third.
What was a largely soporific race for more than half the distance was enlivened by a potential intra-team controversy at Mercedes, when Hamilton disagreed with a request for him to make a second pit stop.
The team had planned to run the race on a single stop, fitting the ‘medium’ tyres for a long final stint after running the first third of the grand prix on the ‘softs’.
But with 25 of the 71 laps to go, Mercedes called Rosberg in for a second stop and then a lap later did the same for Hamilton.
The world champion immediately questioned the decision, only to be told it was for “safety reasons” because the first set of tyres were “down to the canvas”.
Hamilton clearly did not believe what he was being told, saying: “The tyres feel fine.” He was told he must come in: “This is an instruction.”
But after returning to the track, he said to his engineer Peter Bonnington: “You’ve got to check those tyres, Bono.” And asked to be told what the result of that was.
Clearly annoyed, Hamilton started setting fastest sector times and began to close on his team-mate – only for the battle to be interrupted when Vettel crashed, bringing out the safety car.
That bunched the field up, but Rosberg maintained his lead at the restart with 22 laps to go and was able to hold Hamilton off to the end.
It was Rosberg’s first victory since the Austrian Grand Prix nine races ago and his fourth of the season, compared to Hamilton’s 10, and will be exactly what he needed after the disappointment of seeing Hamilton clinch the title with three races to go in the US a week ago, largely thanks to an error by the German.
There were indications Vettel might have been able to give the Mercedes drivers a challenge had he enjoyed a trouble-free race – but his afternoon was anything but.
The Ferrari driver received a puncture when he and Daniel Ricciardo collided at the first corner as the Red Bull driver tried to pass him. Each blamed the other and the stewards declared it a racing incident.
Having fought his way up to 12th place, Vettel spun at Turn Seven, the start of the Esses on lap 17, damaging his tyres. He also ran wide at Turn 12 later on the same lap after rejoining the track.
After a second stop at about half-distance, he rejoined between the two Mercedes drivers, a lap behind, and was able to stick at their pace but had to be told to let Hamilton by.
A few laps later, Vettel ended an uncharacteristically poor race when he again lost control at Turn Seven, this time nosing into the barriers.
He admitted over the radio to his team that he had driven poorly and apologised.
Team-mate Kimi Raikkonen also had a bad race. Starting 19th after a change of engine following qualifying, he was up to sixth when he collided with Bottas at Turn Five.
Bottas went around the outside of Raikkonen at Turn Four and was more than halfway alongside his fellow Finn on the inside as they reached Turn Five, the second part of what is effectively an elongated chicane.
Raikkonen turned in anyway, and the two touched, the Ferrari’s right rear wheel riding over the front left of the Williams and breaking the red car’s suspension.
Red Bull’s Daniil Kvyat finished fourth, but had held third place until the safety car’s introduction. He was passed by Bottas down the straight on the restart, the Williams’ Mercedes power too much for the Renault engine in the Red Bull.
Kvyat was left to fend off Ricciardo to the end, with the second Williams of Felipe Massa taking sixth.
Local hero Sergio Perez, ecstatically cheered throughout by the sell-out crowd in the twisty stadium section at the end of the lap, came home eighth behind team-mate Nico Hulkenberg, impressively fending off the much-fresher-tyred Toro Rosso of Max Verstappen after the safety car.