HTTPS erzwingen

Das force-https-Middleware kann alle Anfragen so umleiten, dass das HTTPS-Protokoll verwendet wird.

Wenn diese Middleware auf einen Router angewendet wird, erzwingt sie die Protokollumleitung nur, wenn eine Route gefunden wird. Falls eine Seite nicht existiert, erfolgt keine Umleitung.

Häufiger ist jedoch die Anforderung, jede Anfrage automatisch umzuleiten, selbst wenn keine Route gefunden wird und ein 404-Fehler zurückgegeben wird. In solchen Fällen kann die Middleware zum Service hinzugefügt werden. Middleware, die zum Service hinzugefügt wird, wird immer ausgeführt, unabhängig davon, ob die Anfrage erfolgreich von einer Route verarbeitet wird.

Beispielcode

main.rs
Cargo.toml
use salvo::conn::rustls::{Keycert, RustlsConfig};
use salvo::prelude::*;

#[handler]
async fn hello() -> &'static str {
    "Hello World"
}

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt().init();

    let router = Router::new().get(hello);
    let service = Service::new(router).hoop(ForceHttps::new().https_port(5443));

    let config = RustlsConfig::new(
        Keycert::new()
            .cert(include_bytes!("../certs/cert.pem").as_ref())
            .key(include_bytes!("../certs/key.pem").as_ref()),
    );
    let acceptor = TcpListener::new("0.0.0.0:5443")
        .rustls(config)
        .join(TcpListener::new("0.0.0.0:8698"))
        .bind()
        .await;
    Server::new(acceptor).serve(service).await;
}