Match ends, Rangers 1, Inverness CT 0.
Rangers 1-0 Inverness Caledonian Thistle
Rangers recorded a fourth straight Premiership win to re-establish a seven-point lead over Aberdeen in the battle for second place.
The hosts took the lead when Martyn Waghorn's shot was deflected in by Brad McKay at the near post.
Andy Halliday went close but Greg Tansey's shot was tipped away for Caley and Liam Polworth missed an open goal.
Rangers toiled after the break and they needed Wes Foderingham's save from Alex Fisher to deny Thistle an equaliser.
Victory extended Rangers' longest Premiership winning run of the season, but Caley can count themselves unlucky not to leave Ibrox with a point.
Defeat - their eighth game without a win - left the Highlands outfit bottom of the table at Christmas on goal difference from Hamilton.
The hosts lacked the same spark which had driven them to victories over Aberdeen, Hearts and Hamilton during a flat first half.
They were grateful that Losana Doumbouya's effort for Caley lacked the pace to beat the alert Foderingham, and a minute later, Rangers were in front.
Waghorn drove to the byline before firing a cross into the box which seemed to be aimed at no-one in particular.
But McKay was unable to get out of its path and watched in horror as the ball fired off his thigh and bounced into the net.
Halliday had Foderingham to thank when he played the ball straight to Larnell Cole in shooting territory, although the Rangers midfielder then saw a fierce 25-yarder saved by Owain Fon-Williams.
Foderingham had to rescue his side again after 35 minutes when he sprang to his right to divert Tansey's effort behind for a corner.
But when the home keeper spilled Lee Hodson's headed back-pass just before the break, the ball fell to Polworth, who fired into the side netting with the goal gaping.
Joe Garner had the chance to justify his new cult hero status after 67 minutes when substitute Kenny Miller's deflected shot broke to him six yards out, but he nudged his header wide.
Tansey and Caley sub Aaron Doran both spurned decent chances to level as Rangers' nerves began to show.
Jason Holt had the chance to ease their concerns with 13 minutes left but his side-footed finish was turned away by Fon-Williams.
And it took another important stop by Foderingham in the final minute to preserve three points as he pushed away Fisher's strike.
Rangers boss Mark Warburton: "It was a poor performance. We were loose in possession and loose out of possession. Our shape wasn't good and we gave the ball away very cheaply.
"But the boys battled and scraped and got the win. I said to the players we've had a bad day in terms of our quality but they emerged with the three points so all credit to them.
"If you can have an off day and still emerge with the spoils it speaks volumes for the team. We've got four victories out of four, we're at 38 points now out of 19 games so we're moving forward."
Caley Thistle boss Richie Foran: "I think the fact Rangers struggled is all down to us. I thought we controlled the game and absolutely dominated the first half.
"We cut them open on numerous occasions and were solid at the back. I can't ask for much more than that.
"We were just lacking that wee bit of magic. Unfortunately we were up against a goalkeeper in unbelievable form. It's soul-destroying how we don't come away with more than a point today."
- 2TavernierBooked at 43minsSubstituted forWindassat 59'minutes
- 33WaghornSubstituted forForresterat 71'minutes
- 10McKaySubstituted forMillerat 59'minutes
- 25Fon Williams
- 6MeekingsBooked at 85mins
- 29ColeBooked at 37minsSubstituted forBodenat 84'minutes
- 11VigursBooked at 45minsSubstituted forDoran Coganat 73'minutes
- 26DoumbouyaSubstituted forFisherat 79'minutes
- 10Doran Cogan
- Don Robertson
- Shots on Target
Second Half ends, Rangers 1, Inverness CT 0.
Foul by Joe Garner (Rangers).
Gary Warren (Inverness CT) wins a free kick in the attacking half.
Foul by Harry Forrester (Rangers).
Ross Draper (Inverness CT) wins a free kick in the attacking half.
Attempt blocked. Joe Garner (Rangers) right footed shot from outside the box is blocked.
Corner, Inverness CT. Conceded by Wes Foderingham.
Attempt saved. Alex Fisher (Inverness CT) right footed shot from outside the box is saved in the top centre of the goal.
Josh Meekings (Inverness CT) is shown the yellow card for a bad foul.
Joe Garner (Rangers) wins a free kick in the attacking half.
Foul by Josh Meekings (Inverness CT).
Substitution, Inverness CT. Scott Boden replaces Larnell Cole.
Attempt blocked. Greg Tansey (Inverness CT) right footed shot from outside the box is blocked.
Joe Garner (Rangers) wins a free kick on the right wing.
Foul by Gary Warren (Inverness CT).
Substitution, Inverness CT. Alex Fisher replaces Lonsana Doumbouya.
Attempt saved. Jason Holt (Rangers) right footed shot from the centre of the box is saved in the centre of the goal.
Foul by Clint Hill (Rangers).
Lonsana Doumbouya (Inverness CT) wins a free kick on the right wing.
Attempt missed. Aaron Doran (Inverness CT) left footed shot from the centre of the box is just a bit too high.
Substitution, Inverness CT. Aaron Doran replaces Iain Vigurs because of an injury.
Substitution, Rangers. Harry Forrester replaces Martyn Waghorn.
Attempt missed. Greg Tansey (Inverness CT) right footed shot from outside the box is close, but misses to the left.
Attempt saved. Martyn Waghorn (Rangers) right footed shot from outside the box is saved in the centre of the goal.
Attempt missed. Gary Warren (Inverness CT) header from the centre of the box is just a bit too high.
Foul by Lee Wallace (Rangers).
Brad McKay (Inverness CT) wins a free kick on the right wing.
Foul by Martyn Waghorn (Rangers).
Carl Tremarco (Inverness CT) wins a free kick in the defensive half.
Attempt missed. Joe Garner (Rangers) header from the centre of the box is close, but misses to the right.
Attempt blocked. Kenny Miller (Rangers) right footed shot from outside the box is blocked.
Foul by Joe Garner (Rangers).
Greg Tansey (Inverness CT) wins a free kick in the attacking half.
Martyn Waghorn (Rangers) wins a free kick in the defensive half.
Foul by Carl Tremarco (Inverness CT).
Kenny Miller (Rangers) wins a free kick in the defensive half.
Foul by Liam Polworth (Inverness CT).
Corner, Inverness CT. Conceded by Lee Hodson.
Josh Windass (Rangers) wins a free kick in the defensive half.