Im CSS-Teil scheint die Struktur der schließenden Klammern nicht zu stimmen.
Durch die flex-Anweisung werden die drei Elemente nav, aside und footer im main-Bereich von links nach rechts angeordnet. Das footer-Element "steht" nicht automatisch unten, weil es footer heißt. Die Bezeichnung footer hat in dieser Hinsicht keine Auswirkungen.
Damit der nav-Bereich direkt unterhalb des headers bleibt musst du ihn entsprechend im Quelltext anordnen und dann fixieren. Dafür gibt es unterschiedliche Möglichkeiten. Zum Beispiel mit der position-Anweisung oder indem du dem "nebenstehenden" Container (in deinem Beispiel aside) eine feste Höhe zuweist.
Was am sinnvollsten ist hängt von deinem Quelltext ab.