South Africa (13) 37
South Africa were made to work for the full 80 minutes
Tries: Fourie, Smit, Pietersen, Smith, James
Cons: Montgomery (3)
Pens: Steyn, Mongtomery
Fiji (3) 20
Tries: Delasau, Bobo
Cons: Bai (2)
Pens: Bai (2)
South Africa edged an absorbing clash with the exciting Fijians 37-20 to book a World Cup semi-final place.
The Springbok forwards laid a platform for total domination and South Africa romped to a 20-6 lead in Marseille, but the Fiji backs had other ideas.
Two Fijian tries in two second-half minutes levelled the game at 20-20 before South Africa crept ahead.
Juan Smith and Butch James added to earlier tries from Jaque Fourie, John Smit and JP Pietersen.
South Africa will travel to Paris to play either Argentina or Scotland next Sunday.
The Springboks made a thunderous start but Fiji were let off the hook when Montgomery's early penalty bounced back off the posts.
Racy Rauluni was a constant menace for Fiji
A change of kicker saw Steyn make amends shortly after but Fiji emerged more or less intact from the early Springbok forward barrage and demonstrated their intent to play fast and loose.
It almost paid off, too, when Fiji pressed deep into Springbok territory and charged down Steyn's attempted clearance, only for Rabeni to knock-on in midfield.
But South Africa were playing a controlled game and by sticking to their plan of patient forward effort they rumbled back down the other end and went close when Juan Smith was held up on the line.
But the threat remained and they soon worked in centre Fourie for a try in the left corner.
Montgomery missed his conversion and Fiji, sparked by the spiky scrum-half and captain Mosese Rauluni, eventually established a foothold with a Seremaia Bai penalty after Bakkies Botha had illegally felled blind-side Semisi Naevo in the line-out.
The green machine renewed normal service soon after and a bullocking run from Botha led to a period of intense Springbok pressure, leading to a simple push-over try from skipper Smit.
Another score early in the second-half from South Africa might have extinguished Fijian hopes, but it was the Pacific Islanders who narrowed the gap when Bryan Habana held onto the ball and Bai stroked three points.
Smith's try finally gave South Africa breathing space
For the first time the Springboks looked rattled, and Fiji went for the jugular with a stunning move orchestrated by, among others, the livewire Rauluni.
But maddeningly, for those hoping for a repeat of Saturday's underdog heroics, South Africa turned over the ball and romped upfield before eventually conjuring a good score in the right corner for Pietersen.
Fiji suffered a further blow when Seru Rabeni was sin-binned for a late tackle on James earlier in the move. And that seemed to be that.
But out of nowhere, Fiji left wing Vilimoni Delasau chipped over the head of Montgomery and won the race to touch down the ball.
That seemed to light some sort of magic touch paper and from the restart, Fiji full-back Norman Ligairi broke through the South African defence and set off upfield.
The languid Fijians are deceptive movers and the pacy Rauluni took the ball on and offloaded brilliantly to Sireli Bobo, who used his momentum to crash over.
Bai's conversion levelled the scores, but South Africa edged back in front when a Fijian infringement during a driving maul gave Montgomery a cheap three-pointer.
But the increasingly tense drama was set for more twists. First, Fijian hooker Sunia Koto was held up inches short, before lock Ifereimi Rawaqa was denied a try by the desperate lunge of Pietersen as he dived for the line.
And to Fiji's dismay, the South African forwards punished them heavily when they muscled their way to the Fijian line for Smith to touch down.
Tempers flared in a fraught final 10 minutes when South Africa set up camp on Fiji's line.
The Springboks squandered two scoring chances when Schalk Burger and Fourie du Preez fumbled over the line but with the time almost up, James dived over to seal the win.
South Africa: Percy Montgomery, JP Pietersen, Jaque Fourie, Francois Steyn, Bryan Habana, Butch James, Fourie du Preez, Dannie Roussouw, Juan Smit, Schalk Burger, Victor Matfield, Bakkies Botha, CJ van der Linde, John Smit, Os du Randt
Replacements: Gary Botha, Gurthro Steenkamp, Jannie du Plessis, Johann Muller, Wikus van Heerden, Ruan Pienaar, Wynand Olivier, Andre Pretorius.
Fiji: Norman Ligairi; Vilimoni Delasau, Kameli Raturou, Seru Rabeni, Sireli Bobo, Seremaia Bai, Mosese Rauluni, Sisa Koyamaibole, Akapusi Qera, Semisi Naevo, Ifereimi Rawaqa, Kele Leawere, Henry Qiodravu, Sunia Koto, Graham Dewes Replacements: Bill Gaddo, Jone Railomo, Aca Ratuva, Wame Lewaravu, Jone Daunivucu, Gabby Lovobalavu