End of Life (2023-01-06): Version 1.x is no longer supported. Please follow the instructions to migrate to latest stable version. The v2 has similar/added features as well as performance/security improvements. See Migrating from v1 to v2
.
A blazing fast static files-serving web server powered by Rust Iron. ⚡
This is the stable v1
. For the latest v2
refer to master branch.
Static Web Server is a very small and fast production-ready web server to serving static web files or assets.
- Built with Rust which is focused on safety, speed, and concurrency.
- Memory safe and very reduced CPU and RAM overhead.
- Blazing fast static files-serving thanks to Rust Iron and Hyper.
- No dependencies. Just a single 4MB and fully static binary (Musl libc) which makes it suitable for running on any Linux distro or Docker container.
- Gzip compression on demand via accept-encoding header.
- Partial Content Delivery support for byte-serving of large files.
- Cache control headers for assets.
- CORS support.
- HEAD responses support.
- TLS support via Rust Native TLS crate.
- Optional directory listing.
- Lightweight and configurable logging.
- Optional HTTP to HTTPS redirection.
- First-class Docker support. Scratch and latest Alpine Linux Docker images.
- Server configurable via CLI arguments or their equivalent environment variables.
- Cross-platform. Binaries available for Linux, macOS and Windows x86_64/ARM64.
Available for download/install via following methods:
hub.docker.com/r/joseluisq/static-web-server/
github.com/joseluisq/static-web-server/releases.
- x86_64-unknown-linux-gnu (64-bit)
- x86_64-unknown-linux-musl (64-bit)
- aarch64-unknown-linux-musl (ARM64)
- aarch64-unknown-linux-gnu (ARM64)
- arm-unknown-linux-gnueabihf (ARM)
- x86_64-apple-darwin (64-bit)
- aarch64-apple-darwin (ARM64)
- x86_64-pc-windows-msvc (64-bit)
- aarch64-pc-windows-msvc (ARM64)
Server can be configured either via environment variables or their equivalent command-line arguments.
Variable | Description | Default |
---|---|---|
SERVER_NAME |
Name for server. | Default my-static-server . |
SERVER_HOST |
Host address (E.g 127.0.0.1). | Default [::] . |
SERVER_PORT |
Host port. | Default 80 . |
SERVER_ROOT |
Root directory path of static files. | Default ./public . |
SERVER_ASSETS |
Assets directory path for add cache headers functionality. | Default ./public/assets . |
SERVER_LOG_LEVEL |
Specify a logging level in lower case (see log::LevelFilter). | Default error |
SERVER_ERROR_PAGE_404 |
HTML file path for 404 errors. | If path is not specified or simply don't exists then server will use a generic HTML error message. Default file path ./public/404.html . |
SERVER_ERROR_PAGE_50X |
HTML file path for 50x errors. | If path is not specified or simply don't exists then server will use a generic HTML error message. Default file path ./public/50x.html |
SERVER_TLS |
Enables TLS/SSL support. Make sure also to adjust current server port. | Default false |
SERVER_TLS_PKCS12 |
A cryptographic identity PKCS #12 bundle file path containing a X509 certificate along with its corresponding private key and chain of certificates to a trusted root. | Default empty |
SERVER_TLS_PKCS12_PASSWD |
A specified password to decrypt the private key. | Default empty |
SERVER_TLS_REDIRECT_FROM |
Host port for redirecting HTTP requests to HTTPS. This option enables the HTTP redirect feature | Default empty (disabled) |
SERVER_TLS_REDIRECT_HOST |
Host name of HTTPS site for redirecting HTTP requests to. | Default host address |
SERVER_CORS_ALLOW_ORIGINS |
Specify a CORS list of allowed origin hosts separated by comas. Host ports or protocols aren't being checked. Use an asterisk (*) to allow any host. See Iron CORS crate. | Default empty (disabled) |
SERVER_DIRECTORY_LISTING |
Enable directory listing for all requests ending with the slash character (‘/’) | Default false (disabled) |
CLI arguments listed with static-web-server -h
.
static-web-server 1.18.1
Jose Quintana <https://joseluisq.net>
A blazing fast static files-serving web server powered by Rust Iron.
USAGE:
static-web-server [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f, --assets <assets>
Assets directory path for add cache headers functionality [env: SERVER_ASSETS=] [default: ./public/assets]
-c, --cors-allow-origins <cors-allow-origins>
Specify a CORS list of allowed origin hosts separated by comas. Host ports or protocols aren't being
checked. Use an asterisk (*) to allow any host [env: SERVER_CORS_ALLOW_ORIGINS=]
-i, --directory-listing <directory-listing>
Enable directory listing for all requests ending with the slash character (‘/’) [env:
SERVER_DIRECTORY_LISTING=]
-a, --host <host> Host address (E.g 127.0.0.1) [env: SERVER_HOST=] [default: [::]]
-g, --log-level <log-level>
Specify a logging level in lower case [env: SERVER_LOG_LEVEL=] [default: error]
-l, --name <name> Name for server [env: SERVER_NAME=]
--page404 <page404>
HTML file path for 404 errors. If path is not specified or simply don't exists then server will use a
generic HTML error message [env: SERVER_ERROR_PAGE_404=] [default: ./public/404.html]
--page50x <page50x>
HTML file path for 50x errors. If path is not specified or simply don't exists then server will use a
generic HTML error message [env: SERVER_ERROR_PAGE_50X=] [default: ./public/50x.html]
-p, --port <port> Host port [env: SERVER_PORT=] [default: 80]
-d, --root <root>
Root directory path of static files [env: SERVER_ROOT=] [default: ./public]
-t, --tls <tls> Enables TLS/SSL support [env: SERVER_TLS=]
--tls-pkcs12 <tls-pkcs12>
A cryptographic identity PKCS #12 bundle file path containing a X509 certificate along with its
corresponding private key and chain of certificates to a trusted root [env: SERVER_TLS_PKCS12=]
--tls-pkcs12-passwd <tls-pkcs12-passwd>
A specified password to decrypt the private key [env: SERVER_TLS_PKCS12_PASSWD=]
--tls-redirect-from <tls-redirect-from>
Host port for redirecting HTTP requests to HTTPS. This option enables the HTTP redirect feature [env:
SERVER_TLS_REDIRECT_FROM=]
--tls-redirect-host <tls-redirect-host>
Host name of HTTPS site for redirecting HTTP requests to. Defaults to host address [env:
SERVER_TLS_REDIRECT_HOST=]
TLS/SSL support is provided by Rust Native TLS crate which supports PKCS #12 cryptographic identity. An identity is an X509 certificate certificate along with its corresponding private key and chain of certificates to a trusted root.
For instance, identity files (.p12
or .pfx
) can be generated using the OpenSSL SSL/TLS Toolkit:
Generate a self-signed certificate (optional):
openssl req -x509 -newkey rsa:4096 -nodes -keyout local.key -out local.crt -days 3650
Generate a PKCS #12 indentity file (using an existing certificate and private key):
openssl pkcs12 -export -out identity.p12 -inkey local.key -in local.crt -password pass:my_password
Example using Traefik Proxy:
version: "3.3"
services:
web:
image: joseluisq/static-web-server:1
environment:
- SERVER_NAME=my-server
- SERVER_HOST=127.0.0.1
- SERVER_PORT=80
- SERVER_ROOT=/public
# NOTE:
# For the server, assets directory is not relative to root.
# That's why, it's necessary to be explicit (prefer absolute paths).
# See release v1.8.0+ for more details.
- SERVER_ASSETS=/public/assets
volumes:
- ./some-dir-path:/public
labels:
- "traefik.enable=true"
- "traefik.frontend.entryPoints=https"
- "traefik.backend=localhost_dev"
- "traefik.frontend.rule=Host:localhost.dev"
- "traefik.port=80"
networks:
- traefik_net
networks:
traefik_net:
external: true
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in current work by you, as defined in the Apache-2.0 license, shall be dual licensed as described below, without any additional terms or conditions.
Feel free to send some Pull request or issue.
This work is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).
© 2019-present Jose Quintana