CloudFront как настроить обратный прокси-сервер на существующем веб-сайте, обслуживающем распространение, от S3 - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть корзина S3, которая содержит веб-сайт и поставляется с CloudFront

, и сейчас я прикрепил дистрибутив к своему корневому домену apex, например - www.xyz.com

ИтакРанее мы использовали Nginx для обслуживания статического внешнего интерфейса от корня веб-сервера в том же домене - www.xyz.com, а также настраивали обратный прокси-сервер - www.xyz.com/api/**, который перенаправлял трафик на внутренний сервер бэкенда.на той же машине.

Теперь я хотел бы переместить веб-сайт на S3, но по-прежнему запускать бэкэнд-API на той же машине, и для этого мне придется изменить свои записи DNS и указать их на CloudFront.распределение.

Но тогда существующие и ранее развернутые и запущенные сервисы, которые используют www.xyz.com/api для внутренних сервисов, сломаются. Итак, я хочу перенаправить все запросы по этому шаблону пути на http: /// apiчтобы существующие приложения не ломались.

Есть ли способ, которым мы можем достичь этого?т.е. -

Переслать запрос от подпути дистрибутива CloudFront, который доставляет статический интерфейс от S3 на внешний сервер приложений?

--- UPDATE --- --- Nginx conf для перенаправления запросов--

location /api/ {
                proxy_pass http://localhost:4040/api/;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_http_version 1.1;
        }

это внутри директивы сервера, которая в настоящее время предоставляет корневой домен и внешний интерфейс для мира, но теперь я хочу перенести внешний интерфейс на S3 и, таким образом, сохранить этот блок местоположения / api только для целей совместимости.пока я не обновлю конфигурацию на всех клиентах.

Если это так, пожалуйста, предложите, как это можно сделать или какая информация вам нужна с моей стороны, чтобы помочь в этом?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Создайте api.example.com в DNS, указывая на ваш API.

Создайте второй источник в CloudFront, указывая на api.example.com.Оставьте поле «Путь к источнику» пустым, поскольку оно не выполняет то, что вы могли бы предположить.

Создайте новое поведение кэша в CloudFront с шаблоном пути /api*.Укажите это на только что созданный источник.

CloudFront отправит все запросы на /api* на api.example.com, а все остальное отправит Cache Behavior Origin Origin, который будет контейнером.

0 голосов
/ 29 декабря 2018

Я не уверен, что это сработает, но это первое, что пришло мне в голову.

  1. Зарегистрируйте дополнительный домен api.xyz.com и укажите его на свойстарая машина.

  2. Использовать следующий блок конфигурации nginx server:

    server {
        server_name api.xyz.com;
        ...
        location / {
            proxy_pass http://localhost:4040;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_http_version 1.1;
        }
    }
    
  3. Перенаправить все запросы с www.xyz.com/api/... на api.xyz.com/...со следующими правилами перенаправления Amazon S3 :

    <RoutingRules>
      <RoutingRule>
        <Condition>
          <KeyPrefixEquals>api/</KeyPrefixEquals>
        </Condition>
        <Redirect>
          <HostName>api.xyz.com</HostName>
          <ReplaceKeyPrefixWith></ReplaceKeyPrefixWith>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

Вы также можете взглянуть на AWS Lambda Edge .Я не знаком с ним, поэтому не могу сказать, можно ли его использовать для этого случая.

...