Skip to content

Instantly share code, notes, and snippets.

@raucao
Last active September 8, 2020 01:29
Show Gist options
  • Save raucao/c7a982226d08acd4e041 to your computer and use it in GitHub Desktop.
Save raucao/c7a982226d08acd4e041 to your computer and use it in GitHub Desktop.
Nginx proxy to S3
location ~* ^/s3/(.*) {
set $bucket '<REPLACE WITH YOUR S3 BUCKET NAME>';
set $aws_access '<REPLACE WITH YOUR AWS ACCESS KEY>';
set $aws_secret '<REPLACE WITH YOUR AWS SECRET KEY>';
set $url_full "$1";
set_by_lua $now "return ngx.cookie_time(ngx.time())";
set $string_to_sign "$request_method\n\n\n\nx-amz-date:${now}\n/$bucket/$url_full";
set_hmac_sha1 $aws_signature $aws_secret $string_to_sign;
set_encode_base64 $aws_signature $aws_signature;
resolver 172.31.0.2 valid=300s;
resolver_timeout 10s;
proxy_http_version 1.1;
proxy_set_header Host $bucket.s3.amazonaws.com;
proxy_set_header x-amz-date $now;
proxy_set_header Authorization "AWS $aws_access:$aws_signature";
proxy_buffering off;
proxy_intercept_errors on;
rewrite .* /$url_full break;
proxy_pass http://s3.amazonaws.com;
}
@burgew
Copy link

burgew commented Sep 8, 2020

I installed OpenResty, in order to set_by_lua, set_hmac_sha1 and others, and the problem I've run into is that the $url_full variable is not recognized by the rewrite command, so the URL is rewritten as just "/". This has the result of discarding the specific object URL and just trying to do a list on the S3 bucket, itself. Is there a way to get the rewrite directive to understand previously declared variables, rather than just the $1, $2, ... that are built into the rewrite directive?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment