The predatory instincts of Shota Arveladze and a composed finish from Tore Andre Flo earned Rangers three points on a Perth paddyfield.
Dick Advocaat's team came through an occasionally tough examination from Billy Stark's bottom-placed side, who are still searching for their first league win of an increasingly gloomy season.
At one point it had looked as though the game might not last the distance, such was the volume of water that fell on the McDiarmid Park pitch. But the rain abated after the break and Rangers took control.
The result leaves Rangers seven points behind the leaders, Celtic, and establishes Flo as the Scottish Premier League's leading scorer with nine in the league and 12 in all competitions.
Arveladze put his side in front within three minutes of the restart. Michael Ball's fierce 30-yard shot was touched on to the crossbar by Miller and the Georgian was first to the rebound, throwing himself forward to head the ball into the empty net.
As the game wore on, Rangers began to dominate and it was no surprise when Flo doubled their lead with a neatly taken side-footed effort from McCann's pass into the box following good work down the left involving Ferguson.
So Stark's first home game as Saints manager ended in defeat, but he believed he had seen encouraging signs. He said: "Disappointment is always the first thing you feel after a defeat but when you analyse it you have to go a lot deeper. You look for the good things and the bad things and for us I think the good things outweighed the negative ones.
"We took the game to Rangers and had a lot of offensive players in our team, with many in positions that were foreign to them. We had Rangers under a fair bit of pressure and I will have to see if we can do that on a regular basis."
Goals: Arveladze (48) 0-1, Flo (69) 0-2.
St Johnstone: Miller, Dods, McCluskey, Dasovic, Murray, Hartley, McBride (Fotheringham, 84), Connolly, Parker, Falconer (Macdonald, 72), Lovenkrands. Substitutes not used: Cuthbert, Russell, McClune.
Rangers: Klos, Ricksen, Numan, Amoruso, Ball, Konterman, Ferguson (Ross, 82), De Boer, Reyna (McCann, 46), Flo (Caniggia, 85), Arveladze. Substitutes not used: Christiansen, McHale.
Referee: S Dougal (Scotland).
Booked: St Johnstone: McCluskey, Hartley; Rangers: Konterman, Flo, Ball, McCann.
Man of the match: Flo.
Attendance: 8,331.Reuse content