Yaya Toure broke through the Porto defense with six minutes left and passed to his right for the Argentine striker to tap in.
Silvestre Varela put Porto ahead in the 27th minute, and goalkeeper Helton produced some impressive saves to keep City at bay.
But Helton was stranded in the 55th when a long downfield pass from Toure hit Porto defender Alvaro Pereira, under pressure from Mario Balotelli, on the back and bounced into the net for the equalizer.
Both clubs came from the Champions League where they missed out on qualification for the following round.
City had won only one of its last seven European away games and manager Roberto Mancini gave notice he was looking for a win in northern Portugal before next week's return leg in Manchester. He fielded an attacking combination of Toure, who was returning from the African Cup, and Balotelli, back from a four-match English Premier League suspension.
Porto, the defending Europa League champion, was unbeaten in its previous seven European games and produced a performance that deserved at least a draw against the English club.
The Portuguese champion came up with a swift move to take the lead, Lucho Gonzalez sending Hulk on a run down the left flank where the Brazilian crossed for Varela, whose flat-out charge into the area got him ahead of his marker and he poked the ball past Joe Hart.
Balotelli, Samir Nasri and Micah Richards all tested Helton before the break.
Richards, who had a busy night keeping out Hulk and James Rodriguez, hit the woodwork early in the second half.
Hart punched away a powerful curling free kick from Hulk in 60th.