Ferron - a fast, modern, and easily configurable web server with automatic TLS
Why Ferron?
- High performance - thoroughly optimized for speed with support for high concurrency.
- Memory-safe - built with Rust, which is a programming language that can offer strong memory safety guarantees.
- Automatic TLS - automatic SSL/TLS certificate acquisition and renewal with Let's Encrypt integration.
- Easy configuration - simple, intuitive configuration with sensible, secure defaults and comprehensive documentation.
- Extensibility - modular architecture for easy customization.
- Powerful reverse proxy - advanced reverse proxy capabilities with support for load balancing and health checks.
Installing Ferron from pre-built binaries
The easiest way to install Ferron is installing it from pre-built binaries.
Below are the different ways to install Ferron:
- Installer (GNU/Linux)
- Installer (Windows Server)
- Package managers (Debian/Ubuntu)
- Package managers (RHEL/Fedora)
- Docker
- Package managers (community)
- Manual installation
Configuration examples
Basic static file serving
// Example configuration with static file serving. Replace "example.com" with your domain name. example.com { root "/var/www/html" // Replace "/var/www/html" with the directory containing your static files }
Basic reverse proxying
// Example configuration with reverse proxy. Replace "example.com" with your domain name. example.com { proxy "http://localhost:3000/" // Replace "http://localhost:3000" with the backend server URL }
More examples
You can find more configuration examples for common use cases in the Ferron documentation.
Building Ferron from source
You can clone the repository and explore the existing code:
git clone https://github.com/ferronweb/ferron.git
cd ferronYou can then build and run the web server using Cargo:
cargo run --manifest-path build/prepare/Cargo.toml cd build/workspace cargo update # If you experience crate conflicts cargo build -r --target-dir ../../target cd .. cp configs/ferron.test.kdl ferron.kdl target/release/ferron
You can also, for convenience, use make:
make build # Build the web server make build-dev # Build the web server, for development and debugging make run # Run the web server make run-dev # Run the web server, for development and debugging make smoketest # Perform a smoke test make smoketest-dev # Perform a smoke test, for development and debugging make package # Package the web server to a ZIP archive (run it after building it) make package-deb # Package the web server to a Debian package (run it after building it) make package-rpm # Package the web server to an RPM package (run it after building it) make installer # Build installers for Ferron 2
Or a build.ps1 build script, if you're on Windows:
REM Build the web server powershell -ExecutionPolicy Bypass .\build.ps1 Build REM Build the web server, for development and debugging powershell -ExecutionPolicy Bypass .\build.ps1 BuildDev REM Run the web server powershell -ExecutionPolicy Bypass .\build.ps1 Run REM Run the web server, for development and debugging powershell -ExecutionPolicy Bypass .\build.ps1 RunDev REM Perform a smoke test powershell -ExecutionPolicy Bypass .\build.ps1 Smoketest REM Perform a smoke test, for development and debugging powershell -ExecutionPolicy Bypass .\build.ps1 SmoketestDev REM Package the web server to a ZIP archive (run it after building it) powershell -ExecutionPolicy Bypass .\build.ps1 Package REM Build installers for Ferron 2 powershell -ExecutionPolicy Bypass .\build.ps1 Installer
You can also create a ZIP archive that can be used by the Ferron installer:
Or if you're on Windows:
powershell -ExecutionPolicy Bypass .\build.ps1 BuildWithPackageThe ZIP archive will be located in the dist directory.
You can also cross-compile the web server for a different target:
# Replace "i686-unknown-linux-gnu" with the target (as defined by the Rust target triple) you want to build for make build TARGET="i686-unknown-linux-gnu" CARGO_FINAL="cross"
It's also possible to use only Cargo to build the web server, although you wouldn't be able to use external modules:
cargo build -r ./target/release/ferron
For compilation notes, see the compilation notes page.
Modules
If you would like to develop Ferron modules, you can find the Ferron module development notes.
Server configuration
You can check the Ferron documentation to see configuration properties used by Ferron.
Contributing
See Ferron contribution page for details.
Below is a list of contributors to Ferron. Thank you to all of them!
License
Ferron is licensed under the MIT License. See LICENSE for details.