After trailing for most of the half to a goal from midfielder Marvin Elliott, Giovani Dos Santos stepped up to send the keeper the wrong way from the spot.
It brought Ipswich their first win in five while for the Robins it was their 12th home draw.
City were already without three defenders through injury and suspension and lost goalkeeper Adriano Basso inside the first ten minutes.
Stretching to reach a deep cross-cum shot from Jon Walters. he came down awkwardly on his left knee. His deputy, Stephen Henderson, in only his second appearance at Championship level was soon involved in the action when he saved a smart shot from Walters.
Ipswich had to make a substitution of their own just after the half-hour mark with David Wright limping off with a knee injury to be replaced by Campo.
He slotted in nicely into an Ipswich rearguard which coped comfortably in the first half with the home attack lacking a cutting edge.
Bristol City's best chance in this dreary period came when Dele Adebola from around the penalty spot chested the ball down to Nicky Maynard but his left-footed drive was off-target.
City though were on the button soon after the restart when Elliott chased a pass from Michael McIndoe and he was almost on his back as he flicked a shot home with the outside of his right foot.
Richard Wright, who made several outstanding saves, had no chance with that one but was soon making two important deflections, one notably from Maynard who hit a shot on the run from 30 yards.
David Norris tested Henderson with a drive to the keeper's left but it was 16-year-old Connor Wickham - Ipswich's youngest ever player - who set up the best chance before the penalty when he was brought down on the edge of the box. However, Henderson made a fine save, tipping Campo's shot over the bar.