Bug Report
Description
When the RustFS console is served behind a path-based reverse proxy at /rustfs/console/, the bucket browser appears to use that console path as the S3 endpoint.
This makes signed S3 requests fail with SignatureDoesNotMatch.
Steps to Reproduce
- Serve the RustFS console at
https://rustfs.example.com/rustfs/console/
- Expose the RustFS S3/API endpoint at the same host root:
https://rustfs.example.com/
- Log in to the console with valid credentials.
- Open the bucket browser.
Expected Behavior
The bucket browser should send S3 requests to the API root, for example:
https://rustfs.example.com/?x-id=ListBuckets
Actual Behavior
The bucket browser sends the request under the console base path:
https://rustfs.example.com/rustfs/console/?x-id=ListBuckets
This returns 403 SignatureDoesNotMatch, and the UI shows “No Buckets”.
Environment
- RustFS version: 1.0.0-alpha.99
- Deployment: Kubernetes
- Install method: official RustFS Helm chart
- Reverse proxy / ingress: Kubernetes Gateway API with Cilium Gateway
- RustFS API/S3 route:
https://rustfs.example.com/ → RustFS service port 9000
- RustFS console route:
https://rustfs.example.com/rustfs/console/ → RustFS service port 9001
- Client OS: macOS
- Client browser: Firefox
Error Details
Failed to fetch buckets: SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
GET https://rustfs.example.com/rustfs/console/?x-id=ListBuckets
HTTP/2 403
Additional Context
The API and console are routed separately because RustFS exposes them on different service ports: 9000 for S3/API and 9001 for the console. The console is also served under its built-in /rustfs/console/ base path. That routing works for loading the UI and for direct S3/API calls, but the bucket browser seems to sign S3 requests against the console base path instead of the API root.
The same credentials work against the S3 API directly:
aws --endpoint-url https://rustfs.example.com s3 ls
A reverse proxy cannot safely rewrite /rustfs/console/?x-id=ListBuckets to /?x-id=ListBuckets, because S3 signatures include the request path.
It would help if the console allowed the S3 endpoint to be configured separately from the console base path.
Checklist
Bug Report
Description
When the RustFS console is served behind a path-based reverse proxy at
/rustfs/console/, the bucket browser appears to use that console path as the S3 endpoint.This makes signed S3 requests fail with
SignatureDoesNotMatch.Steps to Reproduce
https://rustfs.example.com/rustfs/console/https://rustfs.example.com/Expected Behavior
The bucket browser should send S3 requests to the API root, for example:
https://rustfs.example.com/?x-id=ListBucketsActual Behavior
The bucket browser sends the request under the console base path:
https://rustfs.example.com/rustfs/console/?x-id=ListBucketsThis returns
403 SignatureDoesNotMatch, and the UI shows “No Buckets”.Environment
https://rustfs.example.com/→ RustFS service port9000https://rustfs.example.com/rustfs/console/→ RustFS service port9001Error Details
Failed to fetch buckets: SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
GET
https://rustfs.example.com/rustfs/console/?x-id=ListBucketsHTTP/2 403
Additional Context
The API and console are routed separately because RustFS exposes them on different service ports: 9000 for S3/API and 9001 for the console. The console is also served under its built-in /rustfs/console/ base path. That routing works for loading the UI and for direct S3/API calls, but the bucket browser seems to sign S3 requests against the console base path instead of the API root.
The same credentials work against the S3 API directly:
aws --endpoint-url https://rustfs.example.com s3 lsA reverse proxy cannot safely rewrite
/rustfs/console/?x-id=ListBucketsto/?x-id=ListBuckets, because S3 signatures include the request path.It would help if the console allowed the S3 endpoint to be configured separately from the console base path.
Checklist