Flight SQ368, which departed at 02:05 local time on Monday (18:00 GMT Sunday), was two hours into the flight when the pilot announced there was an engine problem.
The plane turned back and landed before the right engine of the Boeing 777 burst into flames.
All 222 passengers and 19 crew on board were safely evacuated.
“We were in the air for roughly an hour before we began to smell gas,” one passenger who gave his name as Chuan told the BBC.
“The pilot came on the intercom and said that there was an oil leak in one of the engines and that they were going to turn and go back to Singapore.”
Chuan added that all the passengers were very calm and that he actually “went back to sleep” after the announcement was made.
It was only after he got off the flight that he realised how “close to death” he and his wife had been.
Firefighters took about five to 10 minutes to extinguish the flames, he said.
Passengers will be transferred to another aircraft which is expected to depart for Milan later on Monday, said Singapore Airlines in a statement on Facebook.