HTTP Settings
v2.0.0 behavior change
All HTTP-related options moved from server to the top-level http key: port, listen, baseURL, socket, tlsCert, tlsKey, externalUrl, internalUrl, disableWebDAV, trustProxyHeaders, and disableRateLimit. If your config still has these under server, run the config migration tool or move them manually — see v2 migration guide.
Configure how FileBrowser listens for HTTP traffic, how URLs are built for shares and integrations, and how the server behaves behind a reverse proxy.
Configuration Options
port
TCP port FileBrowser listens on (default: 80).
Ignored when http.socket is set (Unix socket mode).
Docker healthcheck: If you change the port from the default (80), update the Docker healthcheck in your docker-compose.yaml to match. See Docker healthcheck configuration.
Privileged ports: For ports below 1024, Linux only allows a non-root process to bind if it has the NET_BIND_SERVICE capability (or net.ipv4.ip_unprivileged_port_start is lowered). Rootful Docker Engine / Docker Desktop usually includes NET_BIND_SERVICE in the default profile. bind: permission denied is more typical with rootless engines (Docker rootless, Podman rootless).
listen
Address FileBrowser binds to (default: 0.0.0.0 — all interfaces).
Use 127.0.0.1 when a reverse proxy on the same host forwards traffic to FileBrowser.
baseURL
Subpath FileBrowser is served under (default: /). Required when running behind a reverse proxy on a path prefix.
FileBrowser normalizes this to leading and trailing slashes (e.g. /files/). Routes, static assets, and API paths are all prefixed with this value.
socket
Unix domain socket to listen on instead of TCP port (default: empty — use TCP).
When set, http.port is not used. Cannot be combined with tlsCert / tlsKey — the server exits at startup if both are configured.
tlsCert and tlsKey
Paths to TLS certificate and private key for HTTPS. Both must be set to enable TLS.
When TLS is enabled, the server logs an https:// URL. Cannot be combined with http.socket.
externalUrl
Public base URL used when generating links. Include scheme and host only — baseURL is appended automatically when needed.
| Used for | Not used for |
|---|---|
| Share links and Open Graph metadata | OIDC redirect_uri (always derived from the incoming request) |
OnlyOffice download/callback URLs when internalUrl is unset | WebAuthn RP ID (uses externalUrl when set, else request host) |
| Session cookies or login redirects |
If unset, share links and OnlyOffice public-path URLs fall back to the incoming request (Host header and scheme). Behind a reverse proxy, enable header trust so request-derived URLs use the client-facing scheme and host — http.trustProxyHeaders: true on v2.0.0+, or list forwarding headers under http.trustedHeaders on v1.4.x–v1.5.x.
internalUrl
Base URL integration services use to reach FileBrowser on the private network (optional). HTTP is allowed. This path does not use trustProxyHeaders or trustedHeaders — it is a fixed configured origin, not derived from proxied client requests.
| Used for | Not used for |
|---|---|
| OnlyOffice download/callback URLs (highest priority) | Share links shown in the browser |
| OIDC redirects |
URL priority for OnlyOffice → FileBrowser: internalUrl → externalUrl → incoming request (with header trust enabled when behind a proxy: trustProxyHeaders on v2.0.0+, trustedHeaders on v1.4.x–v1.5.x).
Typically a Docker service name, internal DNS name, or LAN IP. See OnlyOffice configuration.
disableWebDAV
Disable WebDAV support (default: false). When true, the /dav route is not registered.
trustProxyHeaders (v2.0.0+) / trustedHeaders (v1.4.x–v1.5.x)
How FileBrowser honors reverse-proxy forwarding headers depends on your version:
| Version | Config key | Behavior |
|---|---|---|
| v2.0.0+ | http.trustProxyHeaders | Single boolean (default: false). When true, honors all standard forwarding headers. |
| v1.4.x–v1.5.x | http.trustedHeaders | List of header names to trust individually. |
v2.0.0+:
When true, FileBrowser honors X-Forwarded-Host, X-Forwarded-Proto, X-Forwarded-For, and X-Real-IP.
v1.4.x–v1.5.x:
List only the headers your proxy sets. For OIDC or HTTPS behind a proxy, include at least X-Forwarded-Proto and X-Forwarded-Host.
Enable header trust only when a reverse proxy you control is the sole entry point to FileBrowser. Direct deployments (no proxy) should leave trustProxyHeaders false (v2.0.0+) or omit trustedHeaders (v1.4.x–v1.5.x).
When enabled, FileBrowser uses forwarded headers for:
| Area | Headers used |
|---|---|
| Client IP | X-Forwarded-For (first IP), then X-Real-IP |
| Request host | X-Forwarded-Host |
| Request scheme | X-Forwarded-Proto (defaults to https for public URLs when host is forwarded but proto is absent) |
This affects session cookie domain, OIDC redirect_uri, WebAuthn RP ID/origin, share and page URLs, auth rate limiting, failed-login lockout, and activity audit IP.
The config migration tool converts a non-empty v1.4.x–v1.5.x trustedHeaders list to trustProxyHeaders: true when upgrading to v2.0.0+.
Proxy authentication username headers (for example X-Forwarded-User) are not controlled by this option. Set the header name under auth.methods.proxy.header. See Proxy authentication.
If FileBrowser is reachable directly from the internet with header trust enabled, clients can spoof forwarded headers — weakening rate limiting, lockout, cookies, and URL security. Bind to 127.0.0.1 or a private network when possible.
See Reverse proxy: proxy headers for nginx, Traefik, and Caddy examples.
Authentication rate limiting: Login and other auth routes are rate-limited by default. Enable header trust behind a proxy (trustProxyHeaders: true on v2.0.0+, or trustedHeaders on v1.4.x–v1.5.x) so per-IP limits apply to real client addresses — not the proxy.
disableRateLimit
Turns off built-in auth route rate limiting and failed-login lockout (default: false).
Leave this false in production. Setting it to true removes HTTP 429 throttling and account lockout on authentication endpoints.
Built-in authentication rate limiting
When disableRateLimit is false and password (or other credential) auth is enabled, FileBrowser applies per-process, in-memory limits on /api/auth/* routes. Limits are not configurable via YAML; they are built into the server.
Credential tier (login, OTP verify)
Used by POST /api/auth/login and POST /api/auth/otp/verify.
| Control | Limit |
|---|---|
| Per-IP token bucket | 10 requests/minute, burst 8 |
| Per-username token bucket | 10 requests/minute, burst 8 |
| Failed-login lockout | 8 consecutive 401 responses for the same IP and username → 15-minute lockout |
Behavior:
- Rapid automated attempts exhaust the token bucket and receive HTTP 429 with a short
Retry-After(seconds). - Slower guessing that stays under the per-minute rate is blocked by failed-login lockout, which returns HTTP 429 with
Retry-After=900(15 minutes). - A successful login clears the lockout counter for that IP and username.
Passkey login endpoints use the credential token buckets without failed-login lockout.
Other auth tiers
| Tier | Routes (examples) | Per-key limit |
|---|---|---|
| Moderate | logout, signup, OTP generate | 30/min, burst 10 (per IP) |
| OIDC | OIDC login and callback | 60/min, burst 20 (per IP) |
| Authenticated | token management, session renew, passkey register | 180/min, burst 60 (per logged-in username) |
Limitations
- Limits apply per FileBrowser process. Restarting the server clears counters. Multiple replicas do not share state.
- Failed-login lockout is keyed by IP + username, not username alone. Per-username token buckets still apply when an attacker rotates IPs against one account.
- Rate limiting is disabled when
http.disableRateLimitistrueor whenauth.methods.noAuthis enabled.
Example: reverse proxy deployment
Related documentation
- Running behind a reverse proxy — proxy header configuration
- Server settings — database, cache, indexing, and sources
- Authentication — login methods and password policy
- WebDAV — WebDAV usage when
disableWebDAVisfalse