主要观点:作者在过去七年中用 nginx 托管面向公共互联网的内容,后用 axum 替换私人服务器的 nginx 设置,介绍了 axum 的特点和用法,包括编写 Web 服务、处理静态站点、反向代理、添加认证和设置 SSL 证书等,并对比了 axum 与 nginx 的优缺点。
关键信息:
- axum 是 Rust 编写 Web 服务的库,使用简单,基于 tower,可轻松创建 Web 服务和处理请求。
- 用 axum 托管简单静态站点的代码比等效的 nginx 配置稍多,需使用 tower-http 和 tokio 等库。
- 处理不同子域的两个静态站点时,需定义根据主机名路由的处理程序。
- 反向代理需创建处理每个请求并向其他服务器发送请求的处理程序,可使用 with_state 方法传递客户端。
- 添加认证可使用 tower_http::validate_request::ValidateRequestHeaderLayer::basic 或 custom 方法。
- 设置 SSL 证书需使用 rustls_acme,处理过程较复杂,还需处理未加密请求的重定向。
重要细节: - axum 示例代码结构:创建 Router,添加处理程序,创建 TcpListener,通过该监听器提供 Router。
- tower 中的 Service 特质用于处理从互联网接收数据并返回数据,axum 中的处理程序和路由器都是 Service。
- 示例代码中各种函数和结构体的作用及使用方法,如 ServeDir、Query、Pagination 等。
- 完整示例代码可在github查看。
- axum 的优点是能使用 Rust 的全部功能,缺点是比 nginx 慢,某些情况下配置复杂,如处理 FoundryVTT 的 WebSocket 反向代理时曾出现问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。