A second-half goal flurry from the pre-season promotion favourites ended Town’s nine match unbeaten run.
Blues more than matched Harry Redknapp’s side in the opening half, with Luke Chambers and Paul Taylor both going close but Niko Kranjcar’s goal seven minutes after the break gave Rangers the advantage.
Gary O’Neil made it two midway through the half and substitute Armand Traore capitalised on a mistake in the Town defence to seal the points on 74 minutes.
Tommy Smith gave Town a deserved consolation in added on time with a spectacular scissors kick but it was the Londoners who left with the points.
Mick McCarthy restored Paul Anderson to the starting line-up, with Paul Taylor handed a starting place instead of Frank Nouble up front. Alan Lee was among the substitutes, the striker named in the 18 for the first time since returning to the Club in a player/Academy coach capacity at the start of the campaign.
Yossi Benayoun sent a header over the bar in the opening five minutes, O’Neil then high and wide with a speculative effort from 35 yards.
Dean Gerken had to be alert to hold on to a Joey Barton corner that skimmed past everyone at the near post as Rangers edged the opening exchanges.
David McGoldrick led a Town break down the right but couldn’t find the supporting Aaron Cresswell inside the box, then Blues’ leading scorer fired over from 25 yards.
Cresswell had a shot blocked as Town pushed Rangers back and the Londoners were lucky to survive on 25 minutes when Rob Green saved from Chambers eight yards out, with a goalmouth scramble following that eventually saw Chambers
send a left foot shot over the bar.
Anderson was stopped in his tracks at one end by Benoit Assou-Ekotto, then great interplay between Tom Carroll, Benayoun and O’Neil opened up the Town defence but Ryan Tunnicliffe was at the back post to clear the danger.
Gerken then produced a fantastic save to push Charlie Austin’s header over the bar from O’Neil cross, Town responded with Taylor’s 40 yard run and shot that was beaten out by Richard Dunne’s challenge.
Austin was then denied by excellent defending from Christophe Berra as the chances continued to come at either end in a thrilling opening half, with the visitors forced to make a change before the break – Karl Henry on for the injured Barton.
Anderson had the final effort of the half, a drive from 25 yards that Green gathered at the second attempt.
Seven minutes into the second-half, Rangers broke the deadlock. Kranjcar wriggled free from three defenders at a throw and buried his shot in the bottom corner.
Rangers doubled their advantage on 66 minutes, Austin was allowed to cut inside and although Gerken kept out his effort, O’Neil followed up to put the ball in the empty net.
Anderson made way for Nouble, Stephen Hunt on for Luke Hyam in a double change for Town for the last 20 minutes but seconds later Rangers clinched the three points. Smith failed to deal with a long ball and Traore raced through to score his first goal for the Hoops.
Chambers limped off five minutes from time, Tyrone Mings the replacement and he was immediately in the action, his shot hitting Clint Hill before Smith scored a contender for goal of the season with a spectacular scissors kick in added on time to give Town the goal the performance deserved.