Nginx как s3 проксируют с частными блоками

Я пытаюсь создать Nginx как прокси для статического html/js веб-приложения, размещенного на S3. Я прочитал много учебных руководств и сообщений, и я мог заставить его работать, если мой блок установлен как общественность.

Причина мне нужен Nginx как прокси, состоит в том, что я не хочу, чтобы мой блок был общедоступен.

После этого руководства я добавил set-misc-nginx-module от этого GitHub repo. Дополнительный модуль, путем обеспечения ключа AWS и секрета AWS, создает аутентифицируемые запросы S3 на каждый объект блока.

Я перекомпилировал Nginx, и мне удалось позволить его доступу к защищенному блоку. Проблема состоит в том, что я не могу представить HTML, и в основном я обслуживаюсь с содержанием XML блока, который я пытаюсь проксировать.

Это - конфигурационный файл Nginx

server {
    listen 80;
    server_name [MY_DNS];

location * {
    set $bucket           '[MY_BUCKET]';
    set $aws_access       '[MY_AWS_KEY]';
    set $aws_secret       '[MY_AWS_SECRET]';
    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;
}

auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

}

И это - результат, если я пытаюсь получить доступ к своему веб-сайту

<ListBucketResult>
    <Name>[MY_BUCKET]</Name>
    <Prefix />
    <Marker />
    <MaxKeys>1000</MaxKeys>
    <IsTruncated>false</IsTruncated>
    <Contents>
        <Key>index.html</Key>
        <LastModified>[LAST_MODIFIED]</LastModified>
        <ETag>[ETAG]</ETag>
        <Size>22</Size>
        <Owner>
            <ID>[OWNER_ID]
            </ID>
            <DisplayName>[NAME]</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
    </Contents>
</ListBucketResult>

** РЕДАКТИРОВАНИЕ: ** index.html действительно устанавливали тип контента как текст/HTML.

Вероятно, я пропускаю что-то в конфигурации Nginx.

Все хорошо работает, если я установил весь блок как общественность и если я использую "простой" подход прокси.

7
задан 30 December 2018 в 13:24
2 ответа

Вы, скорее всего, уже решили эту проблему, но можете попробовать добавить proxy_hide_header Content-Type; внутри директивы location

4
ответ дан 2 December 2019 в 23:46

Попробуйте изменить местоположение на

        location ~ '^/(.*)' {
0
ответ дан 20 January 2020 в 22:18

Теги

Похожие вопросы