2 medium heads escarole or other greens, roughly chopped (12 to 14 cups)
3 tablespoons olive oil, divided
Salt and freshly ground black pepper
1 cup onion, chopped
4 cloves garlic, finely chopped
2 tablespoons butter
2 tablespoons flour
1 cup low-sodium chicken broth
1 cup milk
1 cup grated Parmesan cheese
2 tablespoons fresh parsley, chopped
1/4 cup finely shredded mozzarella
Cook and drain the pasta according to package directions and set aside.
Preheat the oven to 375°F and coat a 9-inch square casserole dish with nonstick spray and set aside.
Heat 2 tablespoons of the olive oil in a large, deep pan over medium-high heat. Add the escarole a handful at a time and toss with tongs until wilted, 3 to 4 minutes total. Season with salt and pepper, transfer to a bowl and set aside.
Return the pan to the stove and heat the remaining tablespoon of olive oil over medium heat. Add the onion and sauté until soft and translucent, 4 to 5 minutes.
Add the garlic and sauté until fragrant, about 30 seconds. Add the butter and stir until melted. Sprinkle the flour over the mixture, combine well and continue cooking, stirring constantly, 2 minutes longer.
Slowly stir in the chicken broth, scraping up any browned bits that may have accumulated on the bottom of the pan.
Add the milk, increase the heat to medium-high and continue stirring until the sauce is smooth and slightly thickened, 3 to 4 minutes. Add the Parmesan cheese, stir until melted, then add the parsley.
Add the escarole and pasta, combine well and transfer to the prepared baking dish. Scatter the mozzarella over the pasta and bake, uncovered until the cheese is golden, 15 to 20 minutes. Serve immediately.