ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

VeTiS(Very Tiny Server)

Crates.io downloads crates.io Build Status Crates.io MSRV Documentation MIT licensed codecov

一个为现代 Rust 应用打造的极速、极简 HTTP 服务器

VeTiS 是一个轻量级但功能强大的 Web 服务器,将简洁性与高性能融为一体。它基于 Rust 的安全性保证进行设计,提供 HTTP/1、HTTP/2 和 HTTP/3 支持,并拥有清晰直观的 API,让构建 Web 服务变得轻而易举。

历史

VeTiS 最初是 deboa-tests 的一个组件,deboa-tests 是一个由 deboa http 客户端用于集成测试的私有 crate。随着它获得了更多功能,例如 HTTP1/2 和 3 支持以及 TLS,我意识到该项目可以在某种程度上被复用。

因此,出于可复用性的考虑,我启动了 EasyHttpMock,一个旨在为集成目的提供快速简便的 mock 服务器启动方式的项目。很快我就意识到,EasyHttpMock 内部使用的这个 http 服务器不仅可以用作 mock 服务器,还可以用于其他目的。

这就是 VeTiS 诞生的原因。通过利用我在 deboa-tests 中为测试目的所启动的工作,它转变为一个完整的 http 服务器项目,其目标是使其非常灵活,同时保持小巧和快速。

为什么选择 VeTiS?

  • 极简设计:专注于核心——高效处理 HTTP 请求
  • 灵活的运行时:在 Tokio 或 Smol 异步运行时之间进行选择
  • 协议支持:完整的 HTTP/1、HTTP/2 和 HTTP/3 实现
  • 默认安全:内置支持现代密码学的 TLS
  • 零成本抽象:利用 Rust 的性能且无额外开销
  • 特性门控:仅包含所需功能以实现最优的二进制大小

快速开始

将 VeTiS 添加到您的 Cargo.toml

vetis = { version = "0.1.0" }

运行时

Crate 特性

  • http1 (default)
  • http2
  • http3
  • rust-tls (default)

外部 crate

  • static-files
  • reverse-proxy
  • auth

使用示例

使用 VeTiS 创建 Web 服务器非常简单:

use http::Version;
use hyper::StatusCode;
use vetis::{
    listener::ListenerConfig,
    security::SecurityConfig,
    server::{ServerConfig},
    virtual_host::{handler_fn, VirtualHostConfig},
};
use vetis_macros::status_pages;
use vetis_tokio::{
    virtual_host::{path::HandlerPath, VirtualHostImpl},
    Vetis,
};

pub(crate) const CA_CERT: &[u8] = include_bytes!("../../certs/ca.der");
pub(crate) const SERVER_CERT: &[u8] = include_bytes!("../../certs/server.der");
pub(crate) const SERVER_KEY: &[u8] = include_bytes!("../../certs/server.key.der");

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    env_logger::Builder::from_env(env_logger::Env::default().filter_or("RUST_LOG", "error")).init();

    let https = ListenerConfig::builder()
        .port(8443)
        .protocol_version(Version::HTTP_11)
        .interface("0.0.0.0")
        .build()?;

    let config = ServerConfig::builder()
        .add_listener(https)
        .build()?;

    let security_config = SecurityConfig::builder()
        .ca_cert_from_bytes(CA_CERT.to_vec())
        .cert_from_bytes(SERVER_CERT.to_vec())
        .key_from_bytes(SERVER_KEY.to_vec())
        .build()?;

    let localhost_config = VirtualHostConfig::builder()
        .hostname("localhost")
        .port(8443)
        .security(security_config)
        .root_directory("/home/rogerio/Downloads")
        .status_pages(maplit::hashmap! {
            404 => "404.html".to_string(),
            500 => "500.html".to_string(),
        })
        .build()?;

    let mut localhost_virtual_host = VirtualHostImpl::new(localhost_config);

    let root_path = HandlerPath::builder()
        .uri("/hello")
        .handler(handler_fn(|_request| async move {
            let response = vetis::Response::builder()
                .status(StatusCode::OK)
                .text("Hello from localhost");
            Ok(response)
        }))
        .build()?;

    localhost_virtual_host.add_path(root_path);

    let health_path = HandlerPath::builder()
        .uri("/health")
        .handler(handler_fn(|_request| async move {
            let response = vetis::Response::builder()
                .status(StatusCode::OK)
                .text("Health check");
            Ok(response)
        }))
        .build()?;

    localhost_virtual_host.add_path(health_path);

    let mut server = Vetis::new(config);
    server
        .add_virtual_host(localhost_virtual_host)
        .await;

    server.run().await?;

    server
        .stop()
        .await?;

    Ok(())
}

概述

核心功能

  • 独立服务器 - 作为独立的 HTTP/HTTPS 服务器运行
  • 多协议 - 默认禁用对 HTTP/1、HTTP/2 和 HTTP/3 的支持
  • 虚拟主机 - 在单个服务器上托管多个域名
  • SNI 支持 - TLS 的服务器名称指示
  • 反向代理 - 将请求路由到后端服务(功能受控,默认禁用)

内容与安全

  • 身份验证 - 支持多种身份验证方法
  • 授权 - 细粒度访问控制
  • 动态内容 - 模板渲染和内容生成
  • 日志记录 - 全面的请求和错误日志
  • 静态文件服务 - 高效的静态资源分发

语言

  • Python - 支持 ASGI/WSGI/RSGI 应用程序
  • PHP - 支持 PHP 应用程序
  • Ruby - 支持 Ruby 应用程序

路线图

VeTiS 正在不断演进!以下是我们正在开发的内容:

额外功能

  • WebSockets - 实时双向通信
  • 负载均衡 - 在多台服务器之间分发流量

子项目

vetis

HTTP 服务器的核心创建。

vetis-macros

VeTiS 的宏,便于创建小型 HTTP 服务器。

vetis-interface

VeTiS 的接口,便于创建小型 HTTP 服务器。

vetis-proxy

VeTiS 的反向代理支持。

vetis-static

VeTiS 的静态文件支持。

vetis-smol

VeTiS 的 Smol 运行时。

vetis-tokio

VeTiS 的 Tokio 运行时。

基准测试

请参阅 BENCHMARKS.md 以获取详细的基准测试结果。

许可证

可选择以下任一许可证:

由您自行选择。

作者

Rogerio Pereira Araujo rogerio.araujo@gmail.com