use std::fs::File; use std::io::BufReader; use actix_files::Files; use actix_web::{middleware, web, App, HttpRequest, HttpResponse, HttpServer}; use rustls::{Certificate, PrivateKey, ServerConfig}; use rustls_pemfile::{certs, pkcs8_private_keys}; /// simple handle async fn index(req: HttpRequest) -> HttpResponse { println!("{:?}", req); HttpResponse::Ok() .content_type("text/html; charset=utf-8") .body("

Welcome!

") } #[actix_web::main] async fn main() -> std::io::Result<()> { if std::env::var("RUST_LOG").is_err() { std::env::set_var("RUST_LOG", "actix_web=info"); } env_logger::init(); // load ssl keys let config = ServerConfig::builder() .with_safe_defaults() .with_no_client_auth(); let cert_file = &mut BufReader::new(File::open("cert.pem").unwrap()); let key_file = &mut BufReader::new(File::open("key.pem").unwrap()); let cert_chain = certs(cert_file) .unwrap() .into_iter() .map(Certificate) .collect(); let mut keys: Vec = pkcs8_private_keys(key_file) .unwrap() .into_iter() .map(PrivateKey) .collect(); if keys.is_empty() { eprintln!("Could not locate PKCS 8 private keys."); std::process::exit(1); } let config = config.with_single_cert(cert_chain, keys.remove(0)).unwrap(); println!("Starting https server: 127.0.0.1:8443"); HttpServer::new(|| { App::new() // enable logger .wrap(middleware::Logger::default()) // register simple handler, handle all methods .service(web::resource("/index.html").to(index)) // with path parameters .service(web::resource("/").route(web::get().to(|| async { HttpResponse::Found() .append_header(("LOCATION", "/index.html")) .finish() }))) .service(Files::new("/static", "static")) }) .bind_rustls("127.0.0.1:8443", config)? .run() .await }