Diaz’s superb 48th-minute solo effort secured a last-16 win at the Red Bull Arena to put the Spanish side in the driving seat ahead of the second leg at the Bernabeu, although he later limped off in a fresh blow for boss Carlo Ancelotti.
His intervention could hardly have been better timed with 20-goal England international Bellingham facing two to three weeks on the sidelines with a sprained ankle and the 14-time European champions misfiring for long periods in his absence.
Indeed, had Leipzig striker Benjamin Sesko made the most of the chances which came his way and Madrid goalkeeper Andriy Lunin not been in inspired form, the Spaniards might have had significantly more work to do on their own pitch.
The hosts set out their stall from the off when Sesko headed into the net after Xaver Schlager had helped the ball back into the box from Lunin’s punch as he dealt with David Raum’s second-minute corner.
However, the assistant referee’s flag went up immediately and the goal was disallowed, with replays showing Sesko was not offside but team-mate Benjamin Henrichs, who made contact with Lunin, was.
Sesko might have had a hat-trick inside the opening 10 minutes, failing to make the most of Xavi Simons’ fine pass and then firing straight at Lunin, although in the meantime, Real defender Aurelien Tchouameni saw a ninth-minute header cleared off the line, with keeper Peter Gulacsi safely claiming Eduardo Camavinga’s follow-up.
Henrichs tested Lunin from distance, but Toni Kroos responded in kind to keep Gulacsi on his toes after Vinicius Jr had made his first real contribution down the left.
Camavinga got in a vital touch to deflect Sesko’s 20th-minute attempt into the side-netting as Real continued to look vulnerable at the back, with Tchouameni having to make a vital challenge to deny Sesko before Vinicius stabbed wide after exchanging passes with Diaz in stoppage time.
But Bellingham’s replacement broke the deadlock within three minutes of the restart, and he did so in spectacular fashion.
Picking up the ball wide on the right, Diaz span away from Raum and cut inside Simons and then Schlager before curling a left-foot shot across Gulacsi and inside the far post.
Leipzig would have been level almost immediately had Lunin not produced a double save from Dani Olmo and Sesko, and the keeper had to race from his line to prevent Sesko from latching onto Olmo’s excellent through-ball as the Germans fought for a way back into the game.
At the other end, Schlager did just enough to put off Rodrygo as he ran onto Vinicius’ 64th-minute pass after Real had broken at pace, and the Brazilian saw a shot come back off a post after he and Diaz had ripped the home defence to shreds with 19 minutes remaining.
Lunin produced a string of saves to deny Simons, Sesko and Amadou Haidara as Leipzig pushed for an equaliser, but the late assault proved to no avail.