QPR suffered a 1-0 defeat at the Den with Steve Morison’s 55th minute header proving to be the difference between the two sides.
In a highly-charged atmosphere in south London, there were chances at both ends of the pitch but after a goalless first half it was the hosts who broke the deadlock after the interval and they were able to hold out for all three points.
R’s substitute Matt Smith came closest to equalising late on but his downward header fell agonisingly wide.
Ian Holloway made two changes from the side that drew at Ipswich Town three days ago, with Grant Hall and Bright Osayi-Samuel coming in for Jack Robinson and Josh Scowen.
Robinson missed out owing to illness while Scowen served a one-game ban following his red card at Portman Road.
Alex Smithies continued between the sticks behind a back three of Hall, making his first start of the season, Nedum Onuoha and Alex Baptiste.
Jake Bidwell continued as left wingback with Pawel Wszolek carrying out a similar role on the right.
Jordan Cousins, Massimo Luongo and Luke Freeman occupied the centre of the park while Osayi-Samuel played just off Idrissa Sylla in attack.
Millwall went into this game on the back of an impressive 2-2 draw with table-topping Wolves on Boxing Day, while the R;s were hoping to extend their unbeaten run to four fixtures having picked up five points from their previous three games.
In front of a partisan home crowd, Aiden O’Brien carved out the first opportunity of the game, breaking well down the left before finding Jed Wallace on the edge of the box. His floated delivery to the far post was heading back to O’Brien before Wszolek cleared the danger.
From the resultant corner, Millwall again worked a good move before O’Brien found space at the near post but he could only direct his effort over from close range.
On 13 minutes, Luongo had a shot from distance but was unable to keep it down in what was a frenetic opening period to this London derby.
Two minutes later a quick break by the R’s nearly gave Sylla a real sight of goal. Wszolek found Bidwell on the left and his cross-field pass was brilliantly weighted for Sylla, who brought the ball down in the area but just as he shaped to shoot, the chance was thwarted by Wallace.
But Millwall soon worked their way back into the game and Smithies had to be at his best to deny George Saville with his legs from 14 yards while Lee Gregory looked like he was set to give the hosts the lead before he was denied by a brilliant block from Hall.
Wallace found space down the right moments later but could only fire into the side netting as the Lions went close again.
On 36 minutes it was the turn of QPR to knock on the door when Baptiste sent a brilliant cross to the far post for Bidwell who forced an excellent save from Jordan Archer with a fine diving header.
It was certainly an entertaining affair with chances at both ends but at the break the game was still awaiting its first goal of the evening.
Following the break, the impressive Freeman worked Archer with a near-post header following a neat pull-back from Cousins as QPR looked to start the second period on the front foot.
But on 55 minutes it was the hosts who took the lead through Steve Morison when Wallace got to the byline and stood the ball up at the far post for the Lions front man to head home from close range.
Holloway quickly responded, bringing Matt Smith into the action at the expense of Wszolek and moving to a 3-4-3 set up.
Sylla saw his header sail over the crossbar from Bidwell’s centre as Rangers looked to quickly get themselves back on level terms, while Osayi-Samuel had a shot from 18 yards comfortably gathered by Archer.
Meanwhile, Luongo’s low drive was also gathered by Archer – at the second attempt – as the R’s forced their hosts back.
Holloway then made his second change of the night with 20 minutes remaining by handing a first appearance in the blue and white hoops to Under-23 forward Aramide Oteh, who came on for Osayi-Samuel.
Millwall then enjoyed a period of pressure of their own and with ten minutes remaining Holloway made his final substitution of the night by bringing on David Wheeler at the expense of Sylla.
On 85 minutes, Smithies had to be alert to deny James Meredith whose cross took a deflection and nearly beat the R’s stopper at his near post.
Two minutes from full-time Smith came within a whisker of grabbing an equaliser with a trademark header.
Freeman’s corner from the left was met brilliantly by the R’s frontman, but his glancing effort bounced just wide of the far post to the agony of the 1,800 QPR fans behind the goal.
That proved to be the final clear-cut opportunity for Rangers and they will now look to bounce back on New Year’s Day when we play host to high-flying Cardiff City.