HOUSTON -- When Houston starter Bud Norris took a line drive off the shin on the first pitch of the game, he thought his night was over.
After the shock wore off he remained in the game and turned in one of his best performances of the season, allowing one run and three hits in 7 1/3 innings as the Astros beat the Milwaukee Brewers 3-2 on Tuesday night.
Rookie Chris Johnson had a three-run homer in the first inning to help Houston to its third straight win and the 11th in the last 15 games.
Norris (8-8) struck out seven and won for the sixth time in seven decisions.
Norris got hit on a ball hit by Joe Inglett. Houston's trainers examined him for a couple of minutes after he was hit before he threw a couple of warmup pitches and faced the next batter.
"At first I thought it was pretty bad," he said. "I really needed to walk around on it and make it feel better. The adrenaline definitely helped out."
Norris had a large bruise covering his left shin after the game.
"To see him come back and throw as long as he did and as well as he did was pretty special," manager Brad Mills said.
Closer Brandon Lyon gave up a solo homer to Casey McGehee in the ninth inning to make it 3-2 before retiring the next three batters for his 16th save.
Johnson's two-out shot off Chris Capuano (3-4) bounced off the train that sits atop the wall in left-center field, scoring Michael Bourn and Jeff Keppinger to erase a 1-0 deficit. Bourn walked and Keppinger singled before Johnson's ninth home run of the season.
"It all came down to one pitch," Milwaukee manager Ken Macha said. "I think Cappy was trying to go away, and it wound up being a homer to Johnson, who has kind of been a thorn to our side."
It was the second straight start by Norris in which Johnson hit a three-run homer in a 3-2 win, after he also did it last week against the Dodgers.
"He owes me," Johnson said. "He pitched great. He got smoked in the first inning, so you know he was hurting the whole game. So he battled and he had good stuff tonight."
Norris didn't have to be reminded that Johnson's home runs have helped him to wins two games in a row.
"I love C.J. a ton," he said. "We've come up all the way in the minor league together and he's such an amazing player and he's going to be a big player for this team for a long time down the road and it's real big."
Johnson, who leads the Astros with a .320 average, added a double in the eighth inning.
Alcides Escobar grounded out before Ryan Braun homered to left field to put Milwaukee up 1-0 in the first.
"We're getting some runners on, but we're just not getting them in," Milwaukee right fielder Corey Hart said. "And when we hit a homer, it's a solo home run. We can't get guys in, especially when we get in situations where we can take the lead and tie it up. We're just not getting that big hit."
After Braun's homer, Norris didn't allow another hit until he singled with one out in the fourth. Norris walked one batter in each inning from the fifth to the eighth, but didn't allow another hit until Escobar's single that chased him with one out in the eighth inning.
Jeff Fulchino replaced him and struck out Braun before lefty Tim Byrdak came in to strike out Prince Fielder to end the inning.
Keppinger doubled with no outs in the fifth before Capuano retired the next six batters. Norris singled in the seventh inning before Capuano struck out Bourn. He was replaced by Kameron Loe who allowed one hit in 2/3 innings.
Capuano allowed five hits and three runs with three strikeouts in 6 1/3 innings.
Milwaukee manager Ken Macha gave Rickie Weeks the day off on Tuesday. ... Hunter Pence's 44 RBI since the all-star break are most in the National League.