The deal was announced by the Steelers on Friday.
The new contract replaces a one-year, $10 million deal agreed to in February when the Steelers placed the franchise player tag on Woodley.
Woodley earned $550,000 in the final season of his rookie contract and has played four seasons with the Steelers. He was drafted in the second round from Michigan.
Woodley has started 47 regular-season games in his first four seasons, and has 39 career sacks.