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
荒岛
















