But the 37-year-old Swiss sent down his ninth and 10th aces of the match to haul himself back to 3-4. Then two crunching forehand winners reconfigured the shootout.
Ahead 5-4 with two serves, he fired down one towards Nishikori's backhand. The return barely reached the net.
Federer's slick backhand volley on match point wrapped up the encounter after one hour and 51 minutes.
The 6-4 7-6 victory was Federer's first in straight sets following three set slugfests against Daniil Medvedev and Roberto Bautista Agut. The Swiss will next play the 13th seed Borna Coric after the Croatian defeated the unseeded Australian Matthew Ebden 7-5 6-4.
The other semi-final will pit second seed Novak Djokovic against the fourth seed Alexander Zverev.
The pair met for the first time in the final of the Rome Masters in May 2017. Zverev won in striaght sets.
"I feel like I wasn't playing as well as I'm playing today," said Djokovic on the eve of their clash. "But also Alex has improved a lot and he has established himself as a top player. It's going to be definitely a close match."
Zverev's 6-4 6-4 win over 11th seed Kyle Edmund on Friday confirmed him as the fifth player for the eight man end of season championships in London next month.
Rafael Nadal, Federer, Djokovic and Juan Martin del Potro have already qualified for the tournament.
"I think every year you feel more mature," said Zverev. "Every year you spend on tour, you feel kind of different. Last year was the first time I broke through to the top 10 and was a top-five player. It's always easier to get there but then staying there is always the tougher part."