CHARLOTTE, N.C. -- The Carolina Panthers weren't fussing about the way they won Sunday afternoon.
They were gushing about the defense.
Relying on relentless defense and three Graham Gano field goals, the Panthers produced a 9-3 victory over the Buffalo Bills at Bank of America Stadium.
"I'm proud to be a part of this defense," defensive end Julius Peppers said. "I feel good about this group."
Carolina held the Bills to 176 yards of total offense.
"We won a game, 9-3," Panthers cornerback Captain Munnerlyn said. "That happens. Everything is not going to be perfect."
It nearly was for Carolina's defense, which hasn't allowed a touchdown in two games this season.
But the Bills (1-1) had one last chance to pull out a victory on a day when their offense sputtered throughout. They gained 42 yards on their last possession, reflecting their most productive stretch of the game.
On a potential winning drive, the Bills moved to the Carolina 32 in the final minute before an offensive pass interference penalty contributed to derailing the threat.
Then on fourth down, Bills quarterback Tyrod Taylor threw incomplete to rookie receiver Zay Jones, who was open at the Carolina 2 with nine seconds left. Jones couldn't adjust his body in midair in order to make the catch.
"I think everyone is an option on that play," Jones said. "The ball came my way and I just didn't make a play."
The Panthers could rejoice in the way the game unfolded because too often last season they didn't excel in critical situations.
"The close ones in the (2016) season didn't go in our favor," Carolina cornerback Daryl Worley said.
Carolina (2-0) had a chance to put the game away before Gano's 20-yard field goal with 2:35 remaining. The Panthers were set up at the 1-yard line following a pass interference penalty in the end zone, but three plays later ended up settling for three points on what was a 15-play, 73-yard drive.
The outcome spoiled the homecoming for first-year Bills head coach Sean McDermott, who spent the past six seasons as Carolina's defensive coordinator.
McDermott received reminders throughout the game about the strength of the defense that he constructed in his previous job.
Panthers defensive end Charles Johnson said the preseason emphasis on becoming a more physical team was evident.
"It was a very physical game," Johnson said. "We expected it. We kind of figured it would be a defensive battle."
Meanwhile, McDermott's defense was stout as well.
Carolina quarterback Cam Newton completed 20 of 32 passes for 228 yards. He was sacked six times.
"Any time in this league that you can get a win, you take it and run with it," Newton said.
Panthers wide receiver Kelvin Benjamin was the game's top receiver with 77 yards on six receptions.
Taylor was 17 of 25 for 125 yards through the air. He rushed for 55 yards on eight attempts.
Stephen Hauschka's 45-yard field goal with 11:09 remaining brought the Bills within 6-3.
Newton went down in the final minute of the third quarter when he was sacked for the sixth time. He eventually limped off the field, but did not miss any snaps once Carolina regained possession.
The Bills crossed into Carolina territory for the first time on their first drive of the second half. That ended on a failed fourth-and-1 conversion from the Panthers 44.
Buffalo running back LeSean McCoy, who rushed for 110 yards in the opener, was limited to 9 yards on 12 carries.
"It was exactly what I expected," McCoy said. "I am used to defenses stacking the box. I did not get going at all."
The Bills were held to one first down in the first half, but trailed only 6-0 at the break.
Carolina opened the scoring on Gano's 34-yard field goal to conclude the game's first possession. Gano hit a 28-yarder with 2:02 left in the second quarter for the only other scoring in the first half, completing a 10-play drive.
NOTES: The Panthers lost TE Greg Olsen to a first-half broken foot. ... Panthers C Ryan Kalil (sore neck) did not play and was replaced by Tyler Larsen. ... Bills DT Marcell Dareus departed in the first quarter with an ankle injury, but returned later in the half. ... The Bills allowed only 38 rushing yards in the opener against the New York Jets, but the Panthers racked up 50 in the first quarter Sunday. ... Bills FB Mike Tolbert, playing against a team with which he earned a pair of Pro Bowl distinctions, had three rushes for 5 yards Sunday. ... With K Graham Gano winning the kicking job, the Panthers waived K Harrison Butker, but then assigned him to the practice squad when he cleared waivers. ... The Bills are home next Sunday against Denver. ... The Panthers face the visiting New Orleans Saints next week.