Teenage star Alcaraz became the first player to defeat Nadal and Djokovic back-to-back, while he is the youngest player to defeat a world number one in 17 years.
Alcaraz has now won his last five matches against top-10 opponents and will next take on world number one Djokovic, who earlier defeated Hubert Hurkacz, for a place in Sunday's final
Hurkacz will face Carlos Alcaraz, who made his second ATP 1000 semi-final after a thrilling 6-7 (5-7), 6-3, 7-6 (7-5) victory against Miomir Kecmanovic