Blackburn were hanging on towards the end of the first half and only some last-ditch defending denied Heskey after a piercing Agbonlahor run.
Keeper Paul Robinson palmed a fiercely struck Milner shot round the post and Villa continued to press after the break.
Blackburn's efforts to work their way back into the game were being thwarted by some resolute Villa defending, which saw Knight appear to hold Roberts as another appeal for a Rovers spot-kick fell by the wayside.
Allardyce gives credit to Villa
The home side's need to press forward made the pace of Ashley Young an even bigger threat and he raced down the right to set up Milner.
He should have had a second only to send a shot across goal and just wide.
Agbonlahor eventually struck to secure Villa's win, which was a 13th successive match without a defeat for the Midlands club and equalled their best run in top-flight since 1898.
Blackburn boss Sam Allardyce:
"We never really played to our best.
"Credit to Villa as they didn't just stop us playing but played well themselves. They deserved the win."
On the unsuccessful penalty appeals, Allardyce added: "They were not major. You've seen them given and not given but it wasn't to be."
Aston Villa manager Martin O'Neill:
"I'm absolutley delighted to have won the game. It's another away win and it's fantastic going.
"We deserved to win the game. I felt we were excellent and created a lot of chances.
"The team just keep going. They were terrific not just in terms of energy and commitment but ability."
Blackburn: Robinson, Ooijer, Samba, Nelsen, Warnock, Pedersen, Grella, Andrews (Kerimoglu 46), Dunn (Diouf 46), McCarthy, Roberts (Roque Santa Cruz 74).
Subs Not Used: Bunn, Khizanishvili, Villanueva, Givet.
Booked: McCarthy, Kerimoglu.
Aston Villa: Friedel, Cuellar (Gardner 46), Davies, Knight, Luke Young, Milner, Petrov, Barry, Ashley Young, Heskey (Carew 70), Agbonlahor.
Subs Not Used: Guzan, Sidwell, Delfouneso, Salifou, Shorey.
Goals: Milner 27, Agbonlahor 90.
Ref: Steve Bennett (Kent).
BBC Sport Player Rater man of the match: James Milner on 8.68 (on 90 minutes).
Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.