Mikele Leigertwood was the hero as his late goal secured Reading's promotion back to the Premier League.
Leigertwood converted an Ian Harte free-kick to send the Royals into the top flight after four years away.
Brian McDermott's side were not at their best but have now secured 46 points from a possible 51.
Although they were beaten, Forest cannot be relegated from the Championship after Coventry lost at home to Millwall.
Reading were beaten by Swansea in the play-off final last May, but, despite selling striker Shane Long to West Brom and captain Matt Mills to Leicester last summer, they have recovered to win promotion with two games to spare.
Reading under Brian McDermott
- Played: 131
- Won: 66
- Drawn: 34
- Lost: 31
They found themselves down in 16th on 1 November after a slow start to the season, but a run of 15 wins in the last 17 games has propelled them up the league.
With owner John Madejski on the brink of selling the club to Russian tycoon Anton Zingarevich's Thames Sports Investment group, the future now looks bright in Berkshire.
McDermott's side now have two games to battle Southampton for the Championship title.
The Saints need two more points to guarantee joining the Royals in the top flight - though West Ham could also still win automatic promotion.
After a scrappy start, Reading had the ball in the net after 19 minutes, only for Jason Roberts' tap-in to be ruled out after Noel Hunt was penalised for a foul on Forest goalkeeper Lee Camp.
"Reading deserve Premier League football. It's been an amazing performance from them in the second half of the season. They've got a fantastic manager and group of players and I'm absolutely delighted for Brian McDermott. He's a humble and fantastic man. I'm also happy Forest are staying up, so it's been a good night all round."
Reading keeper Adam Federici then had to save from Adlene Guedioura and Dexter Blackstock, before Royals' substitute Adam Le Fondre saw his chip drift just wide of the post.
The home crowd were lifted with news that promotion rivals West Ham had only drawn with Bristol City, and moments later the winner came when Leigertwood buried from close range after Harte's free-kick was not cleared.
Forest came close to snatching a point and keeping the champagne on ice, but substitute Marcus Tudgay's header was cleared off the line by Alex Pearce with the striker's follow-up effort being kept out by Federici, to put Reading back in the top flight.
The final whistle saw emotional scenes as thousands of fans poured on to the Madejski Stadium pitch to celebrate a return to the top flight.
Nottingham Forest manager Steve Cotterill:
"Congratulations to Brian McDermott and the Reading boys on their promotion. They deserve it.
"I watched Brian walk round the Wembley pitch after the play off final and he looked so upset. I rang him the next day to try and cheer him up.
"He has the right sort of boys at this club so congratulations to him and to all of them on gaining a thoroughly deserved promotion."
- 01 Federici
- 05 Pearce
- 17 Gorkss
- 23 Harte
- 24 Cummings
- 08 Leigertwood
- 11 McAnuff
- 14 Kebe Booked
- 26 Mullins
- 10 Hunt (Le Fondre - 58' )
- 33 Roberts
- 12 McCarthy
- 06 Gunnarsson
- 09 Le Fondre
- 18 Church
- 51 Afobe
- 01 Camp
- 02 Wootton Booked (Reid - 84' )
- 04 Chambers
- 16 Gunter
- 26 Elokobi
- 33 Lynch Booked
- 07 Anderson
- 10 McGugan (Greening - 84' )
- 22 Guedioura
- 28 Majewski (Tudgay - 84' )
- 23 Blackstock
- 21 Smith
- 03 Cunningham
- 11 Reid
- 14 Greening
- 20 Tudgay
Live Text Commentary
Full Time The referee brings the game to a close.90:00 +3:15
Adlene Guedioura is adjudged to have handled the ball. Indirect free kick taken by Adam Federici.90:00 +0:59
Marcus Tudgay takes a shot. Adam Federici makes a save.90:00 +0:35
Marcus Tudgay takes a shot. Clearance made by Kaspars Gorkss.86:01
Foul by Jobi McAnuff on Paul Anderson, free kick awarded. Free kick taken by Chris Gunter.84:51
Adam Le Fondre crosses the ball, clearance by Joel Lynch.83:26 Substitution
Substitution Scott Wootton goes off and Andy Reid comes on.83:26 Substitution
Substitution (Nottm Forest) makes a substitution, with Jonathan Greening coming on for Lewis McGugan.83:26 Substitution
Substitution Marcus Tudgay joins the action as a substitute, replacing Radoslaw Majewski.83:14
The ball is swung over by Ian Harte.82:58
Adam Le Fondre takes a shot. Save made by Lee Camp.82:06
Radoslaw Majewski produces a right-footed shot from just outside the box that goes wide right of the goal.81:25
Jason Roberts concedes a free kick for a foul on Paul Anderson. Direct free kick taken by Lewis McGugan.80:03
Assist by Ian Harte.80:03 Goal scored
Goal! - Mikele Leigertwood - Reading 1 - 0 Nott'm For Mikele Leigertwood scores a goal from deep inside the penalty area to the bottom right corner of the goal. Reading 1-0 Nottm Forest.79:17
Free kick awarded for a foul by Chris Gunter on Jobi McAnuff. Ian Harte takes the free kick.78:57
Jimmy Kebe crosses the ball.76:27
Luke Chambers fouled by Jason Roberts, the ref awards a free kick. Free kick taken by Lee Camp.75:34
Ian Harte restarts play with the free kick.75:34 Booking
Booking Caution for Scott Wootton.
Scott Wootton concedes a free kick for a foul on Jobi McAnuff.75:13
Radoslaw Majewski takes a shot. Shaun Cummings gets a block in.73:49
Long range effort by Lewis McGugan goes wide right of the net.73:18
George Elokobi takes the direct free kick.73:18 Booking
Booking Jimmy Kebe is shown a yellow card.73:00
Jimmy Kebe gives away a free kick for an unfair challenge on Paul Anderson.72:18
Hayden Mullins challenges Adlene Guedioura unfairly and gives away a free kick. Lee Camp takes the free kick.70:01
Outswinging corner taken by Lewis McGugan, Effort from inside the six-yard box by George Elokobi goes wide left of the target.68:33
Lewis McGugan takes a outswinging corner from the right by-line played to the near post, Header from deep inside the area by Luke Chambers goes harmlessly over the crossbar.68:21
Lewis McGugan takes a shot. Blocked by Hayden Mullins.67:37
Shaun Cummings produces a right-footed shot from just outside the box that goes wide right of the target.67:07
The ball is sent over by Jobi McAnuff, clearance made by Joel Lynch.65:06
Adam Le Fondre has an effort at goal from the edge of the box that misses to the right of the target.64:48
The ball is crossed by George Elokobi.64:18
Lewis McGugan takes a shot. Hayden Mullins gets a block in.63:59
George Elokobi sends in a cross, clearance by Alex Pearce.61:36
Centre by Shaun Cummings, blocked by George Elokobi.61:00 Booking
Booking Joel Lynch receives a yellow card.59:57
Dexter Blackstock concedes a free kick for a foul on Jobi McAnuff. Free kick taken by Ian Harte.58:33
Free kick awarded for a foul by Shaun Cummings on Adlene Guedioura. Direct free kick taken by Lee Camp.57:46 Substitution
Substitution Noel Hunt leaves the field to be replaced by Adam Le Fondre.56:56
Corner taken by Lewis McGugan, Shot by George Elokobi from deep inside the penalty area misses to the right of the target.56:10
The ball is delivered by Scott Wootton, Adam Federici makes a save.53:47
Centre by Ian Harte.53:18
Free kick awarded for an unfair challenge on Alex Pearce by Dexter Blackstock. Free kick taken by Adam Federici.51:53
Free kick awarded for a foul by Lewis McGugan on Jobi McAnuff. Free kick taken by Mikele Leigertwood.50:42
Jason Roberts is flagged offside by the assistant referee. Free kick taken by Luke Chambers.50:06
The ball is delivered by Jimmy Kebe, Close range header by Noel Hunt goes wide of the left-hand post.50:00
Jimmy Kebe sends in a cross, Adlene Guedioura manages to make a clearance.49:07
Unfair challenge on Mikele Leigertwood by Adlene Guedioura results in a free kick. Ian Harte restarts play with the free kick.47:09
The ball is sent over by Chris Gunter, clearance made by Alex Pearce.46:45
Adlene Guedioura takes a shot. Hayden Mullins gets a block in.45:01
The second half begins.45:00 +1:30 Half time
Half Time The referee calls an end to the first half.43:37
Paul Anderson takes a shot. Blocked by Alex Pearce.43:10
Jason Roberts is caught offside. Indirect free kick taken by Lee Camp.41:46
The ball is sent over by Jimmy Kebe, Chris Gunter makes a clearance.40:16
Free kick awarded for a foul by Kaspars Gorkss on Dexter Blackstock. Luke Chambers restarts play with the free kick.39:21
Centre by Jason Roberts, clearance made by Luke Chambers.37:38
Hayden Mullins takes a shot. Blocked by Luke Chambers.37:30
Centre by Jobi McAnuff, Luke Chambers manages to make a clearance.37:04
Hayden Mullins takes a shot. Save made by Lee Camp.36:15
Dexter Blackstock gives away a free kick for an unfair challenge on Kaspars Gorkss. Adam Federici takes the direct free kick.35:24
Foul by Dexter Blackstock on Kaspars Gorkss, free kick awarded. Free kick taken by Adam Federici.31:41
Noel Hunt fouled by Joel Lynch, the ref awards a free kick. Free kick taken by Ian Harte.30:51
A cross is delivered by Chris Gunter.30:00
Dexter Blackstock takes a shot. Save by Adam Federici.29:09
Foul by Jimmy Kebe on Lewis McGugan, free kick awarded. George Elokobi takes the direct free kick.27:58
Noel Hunt concedes a free kick for a foul on Lewis McGugan. Joel Lynch restarts play with the free kick.25:07
Noel Hunt is penalised for handball and concedes a free kick. Free kick taken by Luke Chambers.21:25
Unfair challenge on Jobi McAnuff by Chris Gunter results in a free kick. Direct free kick taken by Ian Harte.20:04
The referee blows for offside against Radoslaw Majewski. Free kick taken by Adam Federici.19:44
Adlene Guedioura takes a shot. Save by Adam Federici.18:52
The ball is sent over by Jobi McAnuff, free kick awarded for an unfair challenge on Lee Camp by Noel Hunt. Lee Camp takes the free kick.18:43
The ball is delivered by Jobi McAnuff, Luke Chambers makes a clearance.18:07
The ball is delivered by Jobi McAnuff, Luke Chambers makes a clearance.10:23
Unfair challenge on Radoslaw Majewski by Kaspars Gorkss results in a free kick. Lewis McGugan takes the free kick.10:02
Foul by Jason Roberts on Dexter Blackstock, free kick awarded. Lee Camp takes the free kick.8:39
The offside flag is raised against Chris Gunter. Adam Federici takes the free kick.5:46
Foul by Lewis McGugan on Mikele Leigertwood, free kick awarded. Alex Pearce takes the direct free kick.3:37
Corner taken by Lewis McGugan from the left by-line to the near post, clearance by Noel Hunt.3:30
Paul Anderson sends in a cross, Shaun Cummings gets a block in.2:08
Effort from inside the area by Lewis McGugan misses to the left of the target.0:33
George Elokobi challenges Noel Hunt unfairly and gives away a free kick. Shaun Cummings takes the free kick.0:00
The match has kicked off.
Live data and text provided by our data suppliers