Forzar HTTPS

El middleware force-https puede redirigir todas las solicitudes para que utilicen el protocolo HTTPS.

Si este middleware se aplica a un Router, solo forzará el cambio de protocolo cuando la ruta coincida. Si la página no existe, no se realizará la redirección.

Sin embargo, es más común querer que cualquier solicitud se redirija automáticamente, incluso cuando la ruta no coincide y devuelve un error 404. En este caso, se puede agregar el middleware al Service. Los middlewares agregados al Service siempre se ejecutarán, independientemente de si la solicitud coincide con una ruta o no.

Código de ejemplo

main.rs
Cargo.toml
force-https/src/main.rs
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:5800"))
        .bind()
        .await;
    Server::new(acceptor).serve(service).await;
}