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
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;
}