The visitors led twice with goals either side of half-time, but the Iron fought back well in a game they dominated for long spells.
The home side were denied in the sixth minute when striker Andy Keogh bundled the ball home from close range, only to be flagged offside.
He then went close again with a 25-yard drive that curled just wide of the far post.
But it was Crewe who snatched the lead on the half-hour when referee Trevor Kettle pointed to the spot after Ryan Lowe burst into the box and went down under the joint challenge of defenders Lee Ridley and Andrew Crosby.
Luke Rodgers stepped up and cracked the spot-kick confidently past Joe Murphy.
Michael Higdon wasted a chance to put the visitors further ahead when he volleyed over, before Scunthorpe hit back in the 39th minute.
A ball from Ian Baraclough spilt the visitoring defence for Billy Sharp to race through and steer a shot past Ben Williams.
Keogh twice went close for the home side before the interval, but Crewe regained the lead shortly after the break.
A low cross from the right by Rodgers was pushed out by goalkeeper Murphy as far as winger David Vaughan, who forced his shot home at the far post.
The hosts immediately pushed forward with Cleveland Taylor going close when his well-struck was blocked by Ben Williams.
Scunthorpe's efforts were finally rewarded in the 66th minute when Keogh was upended in the box by Michael O'Connor, leaving his skipper Andrew Crosby to step up and send Williams the wrong way with a well struck spot-kick.
Vaughan had a chance to score again for Crewe with another far post effort but this time he dragged it weakly wide.
It was Scunthorpe who applied the pressure in the dying stages. Sharp almost found a winner when he turned in to the box to crack an angled drive that was turned away by Williams.
And in stoppage-time, substitute Andrea Ferretti also went close with a glancing header that was claimed at full stretch by the Crewe keeper.