web-dev-qa-db-ja.com

CloudFrontS3から既存のディストリビューションサービスWebサイトにリバースプロキシを設定する方法

ウェブサイトをホストし、CloudFrontで配信されるS3バケットがあります

そして今、私はディストリビューションを私の頂点のルートドメインに添付しました-www.xyz.com

そのため、以前はNginxを使用して同じドメイン(www.xyz.com)のウェブサーバールートから静的フロントエンドを提供し、リバースプロキシ(www.xyz.com/api/**)をセットアップしてトラフィックをアップストリームバックエンドにルーティングしていました。同じマシン上のサーバー。

ここで、ウェブサイトをS3に移動したいのですが、同じマシンでバックエンドAPIを実行します。そのためには、DNSレコードを変更し、CloudFrontディストリビューションを指す必要があります。

ただし、バックエンドサービスにwww.xyz.com/apiを使用する既存の、以前にデプロイされ実行されているサービスは機能しなくなります。したがって、このパスパターンのすべてのリクエストをhttp:/// apiに転送して、既存のアプリケーションが壊れない。

これを達成する方法はありますか?つまり-

S3から外部アプリケーションサーバーに静的フロントエンドを配信するCloudFrontディストリビューションのサブパスからリクエストを転送しますか?

---更新--------リクエストをリダイレクトするNginxconf ---

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のみを保持します。

もしそうなら、これをどのように行うことができるか、またはこれを行うのに役立つ可能性のある私の側から必要な情報を提案してください。

ありがとう、

5
Harshit Laddha

これがうまくいくかどうかはわかりませんが、これが最初に頭に浮かんだことです。

  1. 追加のドメインapi.xyz.comを登録し、古いマシンをポイントします。

  2. 次のnginxserver構成ブロックを使用します。

    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 もご覧ください。私はそれをよく知らないので、この場合に使用できるかどうかわかりません。

0
Ivan Shatsky