The hosts began the day on 317-4 looking to get as many runs as they could, but some early wickets from England made it look like they wouldn't get up to 450, but Ravichandran Ashwin made 58 and late hitting from Jayant Yadav got the hosts up to 455.
England then, despite Joe Root scoring 53, consistently lost wickets in the final session of the day to leave them with plenty of work to do in order to avoid the follow-on if India decide to enforce it.
Ali takes three quick wickets in the morning session
The second day began with India resuming their first innings on 317-4 with Virat Kohli 151 not out.
Kohli was joined at the crease by Ashwin as the pair looked to build a solid partnership.
Just as the pair looked settled, Moeen Ali got the breakthrough by removing Kohli for 167 to end a brilliant innings by India's premier batsman.
The wicket gave Ali some confidence as he quickly removed Wriddhiman Saha for three and Ravindra Jadeja for a duck to reduce India to 363-7.
Ashwin continued his good form with the bat
Yadav on debut though joined Ashwin at the crease and the pair took their partnership passed the fifty mark as the hosts went to lunch on 415-7 with Ashwin 47 not out and Jayant 26 not out.
After lunch, it didn't take long for Ashwin to bring up another test half century as he looked to get his team pass the 450 mark.
Ben Stokes though got a crucial breakthrough, removing Ashwin for 58 to break a stand of 64 for the eighth wicket.
Late hitting got the hosts up to 455
The lower order decided then to go big to get quick runs as the hosts went passed 450. Adil Rashid got the final two wickets of the innings as he removed Jayant for 35 and Umesh Yadav for 13 as the hosts were all out for 455 in their first innings.
It meant that England had a tough period before tea to try and get to the break without losing any wickets.
India's spinners made England toil despite Root's half-century
The problem though was that Mohammed Shami removed Alistair Cook for two with a beauty which sent the off stump tumbling out of the ground.
Haseeb Hameed and Root though successfully got the team to team to lunch without losing any more wickets as the tourists ended the session on 34-1.
After tea though was where the damage started to happen as the Indian spinners joined the action. The second wicket fell when a mix-up in the running saw Hameed run out for 13 to give India the chance to bowl at a new batsmen.
Ashwin was the man for India as he removed Ben Duckett for 5 to leave England struggling on 72-3.
Root though went passed his fifty and looked determined to go big before he made a monumental mistake as he mistimed a big shot off Ashwin to fall for 53.
Jayant got one further wicket for the hosts as he removed Ali for one to leave England in deep trouble. Stokes and Jonny Bairstow managed to get the team to stumps without losing any more wickets to see the team finish the day on 103-5, still 352 runs behind India.