Match ends, Blackburn Rovers 3, Millwall 2.
Blackburn recorded a second successive home win with a battling victory in testing conditions against Millwall.
Jordan Rhodes gave the hosts the lead, evading Mark Beevers before finding the bottom corner from the edge of the box.
Martyn Waghorn superbly levelled after good work by Liam Trotter and Steve Morison, but parity was short lived.
Ben Marshall headed Rovers in front and a David Dunn header gave his team the cushion before Morison bundled in from close range to ensure a nervy finish.
But the home team held on to inflict a third successive away defeat on the Londoners, who are now just four points from the relegation zone.
Blackburn, who look comfortable in 11th position in the Championship, scored more than one goal at Ewood Park for the first time since the end of August.
Rhodes' 12th goal of the season set the hosts rolling, although Millwall dragged themselves back into contention with a brilliant team goal which ended with Waghorn sliding in at the far post.
Within three minutes of the restart, however, Rovers were back in front as the unmarked Marshall headed home from 12 yards for his first goal for the club.
Dunn's close-range header then went in off the far post for Blackburn's third before Morison struck for what turned out to be a consolation.
Blackburn manager Gary Bowyer:
"We scored three good goals. We didn't play particularly great by our standards but we've played a lot better and lost games.
"We're happy with the character and resilience we've shown against a tough Millwall team.
"I didn't think we passed the ball well enough today by our standards. Sometimes the conditions were not great but you have to give credit to the opposition."
Millwall boss Steve Lomas:
"We were the masters of our own downfall. The three goals we conceded were, I wouldn't even say schoolboy - probably Under12s.
"And that's the reason we're not looking up because going forward we're OK, a threat, scoring goals, but all season we've given away cheap, cheap goals.
"And again it's raised its ugly head.
"I can't keep saying it's unlucky. We're going to have to do something about it."
- 11RhodesSubstituted forGestedeat 88'minutes
- 19TaylorBooked at 80mins
- 7KingSubstituted forDunnat 75'minutes
- 2DunneSubstituted forHoyteat 85'minutes
- 26AbdouBooked at 25minsSubstituted forKeoghat 77'minutes
- 7FeeneyBooked at 64minsSubstituted forEasterat 71'minutes
- David Webb
- Shots on Target
Second Half ends, Blackburn Rovers 3, Millwall 2.
Attempt missed. Steve Morison (Millwall) header from the left side of the box misses to the left. Assisted by Paul Robinson.
Attempt saved. Steve Morison (Millwall) right footed shot from the centre of the box is saved in the bottom left corner. Assisted by Liam Trotter with a headed pass.
Tom Cairney (Blackburn Rovers) wins a free kick in the defensive half.
Foul by Mark Beevers (Millwall).
Offside, Blackburn Rovers. Rudy Gestede tries a through ball, but David Dunn is caught offside.
Goal! Blackburn Rovers 3, Millwall 2. Steve Morison (Millwall) right footed shot from very close range to the centre of the goal. Assisted by Andrew Keogh with a cross following a corner.
Corner, Millwall. Conceded by Thomas Spurr.
Corner, Millwall. Conceded by Ben Marshall.
Substitution, Blackburn Rovers. Rudy Gestede replaces Jordan Rhodes.
Foul by Jordan Rhodes (Blackburn Rovers).
Mark Beevers (Millwall) wins a free kick in the defensive half.
Goal! Blackburn Rovers 3, Millwall 1. David Dunn (Blackburn Rovers) header from the centre of the box to the bottom right corner. Assisted by Grant Hanley following a corner.
Attempt missed. Grant Hanley (Blackburn Rovers) header from the centre of the box misses to the left. Assisted by Tom Cairney with a cross following a corner.
Delay over. They are ready to continue.
Substitution, Millwall. Justin Hoyte replaces Alan Dunne because of an injury.
Delay in match Alan Dunne (Millwall) because of an injury.
Corner, Blackburn Rovers. Conceded by David Forde.
Attempt saved. Jordan Rhodes (Blackburn Rovers) left footed shot from the left side of the box is saved in the bottom left corner. Assisted by David Dunn.