
Estoy intentando configurar Nginx como proxy para una aplicación web estática html/js alojada en S3. Leí muchos tutoriales y publicaciones y podría hacerlo funcionar si mi depósito está configurado como público.
La razón por la que necesito Nginx como proxy es que no quiero que mi depósito sea público.
Siguienteesteguía, agregué el módulo set-misc-nginx deesteRepositorio de GitHub. El módulo adicional, al proporcionar la clave de AWS y el secreto de AWS, genera las solicitudes S3 autenticadas para cada objeto del depósito.
Recompilé Nginx y logré permitirle acceder al depósito protegido. El problema es que no puedo representar el html y, básicamente, recibo el contenido xml del depósito que estoy intentando convertir en proxy.
Este es el archivo de configuración de 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;
}
Y este es el resultado si intento acceder a mi sitio web
<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>
**EDITAR:** El index.html tiene el tipo de contenido establecido como texto/html.
Probablemente me falta algo en la configuración de Nginx.
Todo funciona bien si configuro todo el depósito como público y si uso el enfoque de proxy "simple".
Respuesta1
Es muy probable que ya hayas resuelto esto, pero puedes intentar agregar
proxy_hide_header Content-Type;
dentro de tu location
directiva
Respuesta2
Intente cambiar la ubicación a
location ~ '^/(.*)' {