This commit is contained in:
parent
dd9ae22f03
commit
df4b739617
3 changed files with 12 additions and 9 deletions
|
@ -30,7 +30,7 @@ sled_flush_every_ms = 2000
|
||||||
[s3_api]
|
[s3_api]
|
||||||
api_bind_addr = "[::]:3900"
|
api_bind_addr = "[::]:3900"
|
||||||
s3_region = "garage"
|
s3_region = "garage"
|
||||||
root_domain = ".3.garage"
|
root_domain = ".s3.garage"
|
||||||
|
|
||||||
[s3_web]
|
[s3_web]
|
||||||
bind_addr = "[::]:3902"
|
bind_addr = "[::]:3902"
|
||||||
|
@ -179,11 +179,13 @@ message that redirects the client to the correct region.
|
||||||
|
|
||||||
#### `root_domain`
|
#### `root_domain`
|
||||||
|
|
||||||
The optionnal suffix to access bucket using vhost-style instead of path-style API calls.
|
The optionnal suffix to access bucket using vhost-style in addition to path-style request.
|
||||||
|
Note path-style requests are always enabled, whether or not vhost-style is configured.
|
||||||
|
Configuring vhost-style S3 required a wildcard DNS entry, and possibly a wildcard TLS certificate,
|
||||||
|
but might be required by softwares not supporting path-style requests.
|
||||||
|
|
||||||
For instance, if `root_domain` is `s3.garage.eu`, a bucket called `deuxfleurs.fr`
|
If `root_domain` is `s3.garage.eu`, a bucket called `my-bucket` can be interacted with
|
||||||
can be interacted with with hostname `deuxfleurs.fr.s3.garage.eu`. Note however you
|
using the hostname `my-bucket.s3.garage.eu`.
|
||||||
can't interact with it using hostname `deuxfleurs.fr` directly.
|
|
||||||
|
|
||||||
## The `[s3_web]` section
|
## The `[s3_web]` section
|
||||||
|
|
||||||
|
|
|
@ -263,7 +263,8 @@ async fn handler_inner(garage: Arc<Garage>, req: Request<Body>) -> Result<Respon
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extract the bucket name and the key name from an HTTP path and possibly Host header
|
/// Extract the bucket name and the key name from an HTTP path and possibly a bucket provided in
|
||||||
|
/// the host header of the request
|
||||||
///
|
///
|
||||||
/// S3 internally manages only buckets and keys. This function splits
|
/// S3 internally manages only buckets and keys. This function splits
|
||||||
/// an HTTP path to get the corresponding bucket name and key.
|
/// an HTTP path to get the corresponding bucket name and key.
|
||||||
|
|
|
@ -3,9 +3,9 @@ use idna::domain_to_unicode;
|
||||||
|
|
||||||
/// Host to bucket
|
/// Host to bucket
|
||||||
///
|
///
|
||||||
/// Convert a host, like "bucket.garage-site.tld" or "john.doe.com"
|
/// Convert a host, like "bucket.garage-site.tld" to the corresponding bucket "bucket",
|
||||||
/// to the corresponding bucket, resp. "bucket" and "john.doe.com"
|
/// considering that ".garage-site.tld" is the "root domain". For domains not matching
|
||||||
/// considering that ".garage-site.tld" is the "root domain".
|
/// the provided root domain, no bucket is returned
|
||||||
/// This behavior has been chosen to follow AWS S3 semantic.
|
/// This behavior has been chosen to follow AWS S3 semantic.
|
||||||
pub fn host_to_bucket<'a>(host: &'a str, root: &str) -> Option<&'a str> {
|
pub fn host_to_bucket<'a>(host: &'a str, root: &str) -> Option<&'a str> {
|
||||||
let root = root.trim_start_matches('.');
|
let root = root.trim_start_matches('.');
|
||||||
|
|
Loading…
Reference in a new issue