
Я пытаюсь настроить Nginx как прокси для статического веб-приложения html/js, размещенного на S3. Я прочитал много руководств и постов, и я мог бы заставить это работать, если бы мой бакет был установлен как публичный.
Причина, по которой мне нужен Nginx в качестве прокси, заключается в том, что я не хочу, чтобы мой контейнер был публичным.
Следующийэтотруководство, я добавил set-misc-nginx-module изэтотРепозиторий GitHub. Дополнительный модуль, предоставляя ключ 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 установлен тип содержимого text/html.
Возможно, я что-то упускаю в конфигурации Nginx.
Все работает нормально, если я устанавливаю весь контейнер как публичный и использую «простой» подход с прокси.
решение1
Вы, скорее всего, уже решили эту проблему, но вы можете попробовать добавить
proxy_hide_header Content-Type;
в свою location
директиву
решение2
Попробуйте изменить местоположение на
location ~ '^/(.*)' {