Я немного застрял в этой проблеме и хотел бы знать, могу ли я получить какие-нибудь указатели в правильном направлении. :))
У меня есть корзина AWS S3, которую я хотел бы разместить за веб-сервером Apache.
Я тестирую локально, используя изображение httpd Docker.
У меня есть корзина S3 с папкой с именем «папка» и файлом внутри этой папки с именем «file.txt», а также «file.zip».
Мне нужны запросы URI к моему Apache веб-сервер для «/file.txt» или «/file.zip» для прокси-сервера в мою корзину S3 для загрузки файла.
Текущий httpd-custom.conf (Я пробовал разные варианты)
<VirtualHost *:*>
SSLProxyEngine on
<LocationMatch "/file(.*)(.zip|.txt)">
ProxyPass https://<bucket name>.s3.amazonaws.com/folder/$1
</LocationMatch>
</VirtualHost>
Текущая Политика корзины S3 :
{
"Version": "2008-10-17",
"Id": "S3_Policy",
"Statement": [
{
"Sid": "DenyNonProxyWebAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucket name>/folder/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "<IP of host where I am running the httpd docker image>/32"
}
}
}
]
}
Текущая Конфигурация CORS корзины S3 :
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Также для сегмента S3 установлено значение publi c. Вроде у меня частично работает, но файлы не скачиваются. Вместо этого возвращается тип содержимого каталога.
# Direct Curl to S3 bucket
→ curl -I https://<bucket>.s3.amazonaws.com/folder/file.txt
HTTP/1.1 200 OK
x-amz-id-2: <>
x-amz-request-id: <>
Date: Tue, 14 Jul 2020 20:19:37 GMT
Last-Modified: Mon, 13 Jul 2020 15:19:07 GMT
ETag: "<>"
Accept-Ranges: bytes
Content-Type: text/plain
Content-Length: 17277
Server: AmazonS3
# Direct Curl to Apache
→ curl -I http://localhost:9898/file.txt
HTTP/1.1 200 OK
Date: Tue, 14 Jul 2020 20:20:48 GMT
Server: AmazonS3
x-amz-id-2: <>
x-amz-request-id: <>
Last-Modified: Mon, 13 Jul 2020 15:18:06 GMT
ETag: "<>"
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Content-Type: application/x-directory
# Apache Log
172.17.0.1 - - [14/Jul/2020:20:20:49 +0000] "HEAD /updateSupport.txt HTTP/1.1" 200 -
Я также пробовал следующую конфигурацию, но безрезультатно. Я либо сталкиваюсь с типом содержимого «application / x-directory», либо с ошибкой 403.
<VirtualHost *:*>
SSLProxyEngine on
ProxyPreserveHost
<LocationMatch "/file(.*)(.zip|.txt)">
RequestHeader set X-Forwarded-Proto "https"
ProxyPass https://<bucket>.s3.amazonaws.com/folder/$1
ProxyPassReverse https://<bucket>.s3.amazonaws.com/folder/$1
RequestHeader set "Host" "<bucket>.s3.amazonaws.com"
RequestHeader unset Cookie
</LocationMatch>
</VirtualHost>
На этом этапе я потерялся. Не уверен, что я делаю простую ошибку или это как-то связано с изображением / настройкой Docker.
Apache Версия / модули:
root@a168a8c4866c:/usr/local/apache2# httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_event_module (shared)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
access_compat_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
proxy_module (shared)
proxy_http_module (shared)
ssl_module (shared)
proxy_http2_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
dir_module (shared)
alias_module (shared)
rewrite_module (shared)
root@a168a8c4866c:/usr/local/apache2# httpd -v
Server version: Apache/2.4.43 (Unix)
Server built: Jun 9 2020 07:00:39