静看光阴荏苒
不管不顾不问不说也不念

Ferron:一个用Rust编写的快速、内存安全的Web服务器

Ferron是一个用Rust编写的高性能Web服务器。Ferron特点(摘自项目页面):

High performance – built with Rust’s async capabilities for optimal speed.
Memory-safe – built with Rust, which is a programming language offering memory safety.
Extensibility – modular architecture for easy customization.
Secure – focus on robust security practices and safe concurrency.

我安装用了一段时间,觉得各方面非常不错,所以特地写篇入门的文章,顺便也算是推荐一下吧。目前我已经把多台服务器的NGINX换成这个了。初次用Ferron给人最大的感觉就是配置起来特别简单,有点Caddy那味,甚至比Caddy还简单。

除了配置简单以外,很多特性或者说功能都是开箱即用的,比如HTTP3、PROXY Protocol、WebSocket、GRPC反代、FastCGI、自动申请TLS证书等等。废话就不多说了,下面一起来体验一下。

安装Ferron,这里我的系统是Debian 13,使用官方的存储库来安装:

apt update
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://deb.ferron.sh/signing.pgp | gpg --dearmor | tee /usr/share/keyrings/ferron-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/ferron-keyring.gpg] https://deb.ferron.sh $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ferron.list
apt update
apt install ferron

管理Ferron服务:

systemctl stop ferron
systemctl restart ferron
systemctl reload ferron

重要的目录和文件:

/var/log/ferron/access.log # 访问日志
/var/log/ferron/error.log # 错误日志
/var/www/ferron # Ferron的网站根目录
/etc/ferron.kdl # Ferron的主配置文件

默认使用的用户和主目录:

ferron:x:1000:1000::/var/lib/ferron:/usr/sbin/nologin

编辑主配置文件:

nano /etc/ferron.kdl

在主配置文件添加如下内容可以包含(include)其他配置文件:

include "/var/lib/ferron/*.kdl"

在主配置文件添加如下内容以支持HTTP3、PROXY Protocol(默认未启用)、自动申请TLS证书功能:

* {
    protocols "h1" "h2" "h3"
    protocol_proxy #false
    auto_tls
    auto_tls_contact "imlala@example.com"
    auto_tls_cache "/var/lib/ferron/letsencrypt-cache"
    auto_tls_letsencrypt_production
    auto_tls_challenge "http-01"
}

现在简单说一下最常见的用例:反向代理。在主配置文件或者包含(include)一个新的配置文件写入如下内容:

example.com {
    proxy "http://127.0.0.1:3000/"
}

这就完成了一个反向代理的配置,并且Ferron直接就支持WebSocket,不需要额外的配置。我们需要注意的是Ferron默认会将请求发送到后端服务器之前重写“Host”标头,并在“X-Forwarded-Host”标头中保留原始的“Host”标头值。然而,有些Web应用程序可能无法在这种配置下正常工作,这可能会导致主机头不匹配以及其他问题。在这种情况下,你可以将“Host”标头设置为原始值(保留完整的“Host”标头):

example.com {
    proxy "http://127.0.0.1:3000/"
    proxy_request_header_replace "Host" "{header:Host}"
}

Ferron还支持多域名(virtual host)、IP(virtual host):

example.com,www.example.com {
    ...
}

"192.168.1.1" {
    ...
}

自动重定向,将不带“www”的URL重定向到带“www”的URL:

example.com {
    wwwredirect #true
}

每当配置文件发生更改,只需要Reload即可使Ferron使用新的配置:

systemctl reload ferron

除了反代,Ferron还支持通过FastCGI运行PHP程序,例如这里我要配置一个Laravel:

example.com {
    root "/var/www/laravel/public"
    rewrite "^/(.*)" "/index.php/$1" file=#false directory=#false last=#true
    fcgi_php "unix:///run/php/php8.4-fpm.sock"
}

这里要特别注意,Debian系统默认的Unix套接字(php8.4-fpm.sock)所有者和组是www-data,我们需要将其修改为ferron,编辑如下配置文件:

nano /etc/php/8.4/fpm/pool.d/www.conf

找到如下内容将其修改为ferron:

listen.owner = ferron
listen.group = ferron

重启PHP-FPM:

systemctl restart php8.4-fpm.service

重载Ferron:

systemctl reload ferron

完整的配置和文档请参考官方网站:https://ferron.sh/docs

赞(0)
未经允许不得转载:荒岛 » Ferron:一个用Rust编写的快速、内存安全的Web服务器
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿