In a medium saucepan, combine the water, whole milk, unsalted butter, granulated sugar, and salt. Bring this mixture to a gentle boil over medium heat until the butter is fully melted.
Remove the saucepan from heat and quickly add the all-purpose flour. Stir vigorously with a wooden spoon until the dough forms a ball and pulls away from the sides of the pan.
Allow the dough to cool for a few minutes. Once it’s warm (not hot), add the eggs one at a time, mixing well after each addition. The dough should be smooth, glossy, and somewhat thick.
In a large pot or deep fryer, heat your oil to 350°F (175°C). You’ll want to have enough oil to submerge the Zeppole completely.
Scoop the dough into a piping bag fitted with a large round tip. Pipe small rounds of dough into the hot oil, being careful not to overcrowd the pot. Fry until golden brown, about 3-4 minutes, turning them halfway through.
Using a slotted spoon, remove the Zeppole from the oil and place them on a cooling rack lined with paper towels to drain. Once they’ve cooled slightly, dust with confectioners' sugar.
Enjoy your freshly made Zeppole warm, or allow them to cool completely before storing. These delightful treats are best enjoyed on the day they are made!