Nadal won the opening set and was 3-0 up in the second set but lost it as Ferrer showed the fighting qualities which took him inside the top five last season.
However, eight-time champion Nadal sneaked out the win in the third set and will now play world number one Novak Djokovic in Saturday's semi-final.