Использование Apache в качестве обратного прокси для сегмента AWS S3 - PullRequest
0 голосов
/ 14 июля 2020

Я немного застрял в этой проблеме и хотел бы знать, могу ли я получить какие-нибудь указатели в правильном направлении. :))

У меня есть корзина 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...