Middlesbrough manager Tony Pulis was bitterly disappointed to see his side miss out on the play-offs despite this win at Rotherham United.
Boro finished a point outside of the Championship’s top six after Derby managed to defeat West Brom on a frantic final day of the season.
The Teesside club, knowing they had to win to stand any chance of continuing their season, did their bit with Britt Assombalonga on target from the spot and captain John Obi Mikel also netting in the first half.
Relegated Rotherham got a late consolation goal when Michael Smith beat goalkeeper Darren Randolph from the penalty spot.
Pulis said: “I thought we played really well first half and once again it’s another half where once again we should have come in with a few more goals.
“Second half was a rollercoaster because of the crowd.
“We’ve won five out of the last six games. We had a poor performance at Forest, but the rest of the time they’ve really dug in and taken it to the last couple of minutes.
“The players have got to take a lot of pride. They’ve really, really worked hard and, as I say, to win five of the last six games is great credit to them.”
Decisions will be made on the future of the playing squad – as well as Pulis – now Boro know they will once again be in the Championship.
The Welshman, who will sit down with owner Steve Gibson in the coming days, said: “We were hoping and praying to come out of this ground in the play-offs. That has been the overriding thing.
“Steve has paid me to get a grip on the football club and I have tried to do that in a way that helps this club.
“The job’s the job. I have been managing for 30-odd years. It’s not the first job I have been at where I have had to balance the books. I was doing that at Bournemouth in ’93-94.”
Rotherham manager Paul Warne was proud of how his players kept going through the second half.
He sees encouraging signs ahead of another season in League One and said: “It was a microcosm of the season. We were excellent from box to box, but not good enough in both boxes to win the game.
“Take the game away from it, I thought my team were excellent.
“The lads gave everything they could to keep the integrity of the league going.
“We knew at the start of the season when the fixtures came out that the last eight or 10 games didn’t exactly look kind. I was glad we got a goal for our fans to have something to cheer about.
“For us to compete as well as we have gives me real pride.
“There will be three very good teams stay behind after the play-offs in League One.
“Then there is going to be us, Bolton and Ipswich. It’s going to be a really tough season and, hopefully, with a good wind and the odd refereeing decision going our way here and there we might be where we want to be.”
It was already-relegated Rotherham who did the early pressing with Smith forcing Darren Randolph into a neat stop with a shot across goal.
Boro’s first chance was a good one as Assombalonga snuck through on goal, but slipped his effort wide when one-on-one with Lewis Price. The visitors’ other frontman Ashley Fletcher was the next to take aim, but did not trouble Price from the edge of the box.
Smith was guilty of missing a glaring chance at the other end as he spooned over after Matt Crooks had opened up Boro’s defence down the left and squared for the striker.
The away side were quick to make them pay when Assombalonga won and scored a penalty after being pulled down in the box by Clark Robertson.
Middlesbrough doubled their lead with Mikel netting in the 37th minute. The ball fell to him from a corner and he viciously lashed it into the roof of the net.
Millers substitute Kyle Vassell won Rotherham an 86th-minute penalty after he was tripped by Mikel when he was about to pull the trigger.
Smith stepped up and beat Randolph from the spot with a cool finish, but Rotherham were unable to find an equaliser at the end of a match that saw both sides suffer disappointment.
Rotherham United: Price, Jones, Ihiekwe, Robertson, Mattock, Crooks (Potter 66), Ajayi, Wiles, Forde (Williams 46), Smith, Newell (Vassell 76). Unused substitutes: Vyner, Wood, Palmer, Towell.
Middlesbrough: Randolph, McNair, Flint, Shotton, Howson, Wing (Tavernier 85), Mikel, Besic (Clayton 82), Saville, Fletcher (Downing 76), Assombalonga. Unused substitutes: Konstantopoulos, Hugill, Gestede, Spence.
Referee: Andrew Madley (West Yorkshire).