AI 中文社区(简称 AI 中文社),是国内学习交流AI人工智能技术的中文社区网站,这里可获取及贡献任何AI人工智能技术,我们追求自由、简洁、纯粹、分享的多元化人工智能社区。

在网站应用中 Rust Axum 怎么优雅地处理静态文件

Rust · 杰作 108天前发布 · 浏览413次 · 点赞0次 · 收藏0次

网站应用的静态文件,在生产环境,强烈推荐使用 nignx 来代理处理。如果在开发阶段,采用本地来处理静态文件,是很有必要的,而且要求本地 URL 要和 nginx 代理的 URL 保持一致,上线的时候,无需做大的改动。Rust 开发网站应用目前国内还比较少,很少有 axum 处理静态文件相关的说明,即使有,文档也是有些年月,已经失效不能用了,在 Rust 世界里,众所周知它的 API 不算稳定,造成了第三方库的使用也存在同样的问题。

以下是正题

原来以为 axum 处理静态文件很复杂,经过查阅一些文档之后,原来一行代码就搞定了,以下是 axum 处理静态文件的代码:

use crate::controllers::controller;
use axum::{routing::get, Router};
use tower_http::services::ServeDir;
pub fn new_router() -> Router {
    let root_router = Router::new()
        .route("/index", post(controller::index))
        // 一行代码处理静态文件
        .nest_service("/static", ServeDir::new("./static"));
    root_router
}

备注:.nest_service("/static", ServeDir::new("./static")) 是关键代码,是不是非常简单,我们把静态文件放在根目录 static 下,static 里面一般有 css js images 相关的几个静态文件夹,以上的代码是路由器构建部分,只需增加一行代码,就可以处理网站应用的静态文件了,访问静态文件如下:

http://localhost:30001/static/images/abc.png
http://localhost:30001/static/css/style.css
http://localhost:30001/static/js/script.js

以下是扩展话题

生产环境不建议使用 axum 来处理,因为考虑到性能和文件负载的问题,我们还是建议通过 nginx 代理来处理,这样性能有保证(可以增加缓存),而且独立扩展性更加符合生成环境的要求(后期可以增加 CDN),以下是 nginx 代理网站应用静态文件的部分配置。

server {
    listen      443 ssl http2; 
    server_name www.domain.com domain.com;
    ssl_certificate /var/www/website/ssl/domain.com_bundle.pem; 
    ssl_certificate_key /var/www/website/ssl/domain.com.key; 
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    # domain.com 跳转到 www.domain.com
    if ($host = 'domain.com') {
        rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
    }
    
    location / {
        proxy_pass http://localhost:3005;
        
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
	    proxy_set_header X-Forwarded-Proto https;
    }
     
    # nginx 处理网站应用的静态文件
    location /static {
        root        /var/www/website/;
        expires     30d;
        add_header  Cache-Control public;
        access_log  off;
    }
}

备注:/var/www/website/ 是网站的根目录,其中 static 静态文件夹在根目录下。生产环境,如果使用 nginx 处理了静态文件,就需要把 axum 项目处理静态文件的那行代码 .nest_service("/static", ServeDir::new("./static")) 去掉。如果想灵活处理,可以设定 dev、test、prod 三种环境配置文件,不同的环境下,决定是否需要 axum 本地处理静态文件。

在网站应用中 Rust Axum 怎么优雅地处理静态文件 - Rust - 话题 - AI 中文社区
点赞(0) 收藏(0)
0条评论
现在评论,你将成小区里最靓的仔^_^
评论

游客
登录后再评论
  • 一字一句需斟酌,一言一语显风范。
  • 评论消耗5积分,点赞、收藏消耗3积分。