Rota Amazon 53 + cloudfront + s3 - com aplicativo angularjs2 em ec2

1

Estou muito confuso sobre a configuração que preciso para o meu aplicativo angularjs2.

É simplesmente uma aplicação SPA com URLs no modo html5 e tudo que eu quero é:

  • as solicitações para www.mydomain.com/blabla... serão redirecionadas para o mesmo mydomain, mas sem o www
  • as solicitações para mydomain.com/anything/including/path/like/this fornecerão o s3 (/ cloudfront) index.html
  • as solicitações para mydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.js veicularão esse arquivo do s3 (/ cloudfront) se for muito difícil Eu também posso configurar meu site para que todos os certificados estejam na pasta de recursos para que solicitações sejam enviadas mydomain.com/assets/path/blabla.bla servirá o arquivo estático do s3 (/ cloudfront)
  • e por último, mas não menos importante, solicitações para mydomain.com/api/... redirecionarão para a instância ec2 que contém meu servidor node.js da API REST

Normalmente, eu usaria apenas uma instância ec2 com nginx e node.js enquanto nginx try_files e, se falhar, forneceria o arquivo index.html e, se a URL for /api/.. , redirecionará a solicitação para a API que está no mesmo ec2

O problema com essa configuração é que ela não é escalável e difícil de manter se você tiver mais de uma instância ec2

Eu procurei muito no google, mas não consigo encontrar nenhum guia ou uma postagem no blog sobre como configurar algo como o que descrevi na nuvem da AWS.

Agradecemos antecipadamente:)

    
por kfir124 06.06.2016 / 09:28

1 resposta

5

requests to www.mydomain.com/blabla... will be redirected to the same mydomain but without the www

Isso é feito criando um bucket vazio no S3 chamado www.example.com , configurando-o para redirecionar todas as solicitações para um hostname diferente ( example.com ) e apontando o DNS para ele.

Se você quiser que ele ofereça suporte ao redirecionamento de solicitações https no lado www, crie uma segunda distribuição do CloudFront para o nome do host www, apontando para o ponto de extremidade do site para o intervalo e apontando DNS para o CloudFront.

requests to mydomain.com/anything/including/path/like/this will give the s3 (/cloudfront) index.html

Configure o intervalo example.com (aquele com o seu conteúdo, não o vazio discutido acima) para hospedagem estática do site, e definir o nome do documento de índice para index.html nas opções de configuração de hospedagem do site estático do intervalo. Conforme discutido na documentação do S3, quando o recurso de hospedagem de site do S3 estiver ativado para o intervalo, a página de índice nomeada do local apropriado no bucket será automaticamente retornada pelo S3 sempre que possível, de acordo com estas regras:

  • Se o caminho solicitado for /foo/bar/ (com barra final), o S3 procurará um objeto com a chave foo/bar/index.html e o retornará, deixando a barra de endereço do navegador inalterada.

  • Se o caminho solicitado for /foo/bar (sem barra) e foo/bar/index.html existir, o S3 retornará um redirecionamento para /foo/bar/ , o que resulta no comportamento descrito acima, após a exibição do / à direita na barra de endereços do navegador. (Este é o redirecionamento para adicionar a barra final é o comportamento padrão do servidor da Web; caso contrário, os links relativos na página de índice apontarão para o diretório errado).

Em vez de selecionar o intervalo da lista suspensa no CloudFront, você precisa digitar o nome do host do ponto de extremidade do site para o intervalo, ao configurar a origem do CloudFront. Caso contrário, os recursos do site, como documentos de índice, não serão ativados:

Important

Do not select the name of your bucket from the list, such as example.com.s3.amazonaws.com

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html

Próxima edição:

requests to mydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.js will serve that file from the s3 (/cloudfront) if it's too hard I can also set up my website so all that assests will be in the assets folder so requests to mydomain.com/assets/path/blabla.bla will serve the static file from the s3 (/cloudfront)

Você pode configurar o CloudFront para escolher para qual "origem" (sistema back-end) uma solicitação será enviada, usando comportamentos de cache, cada um dos quais corresponde a um padrão de caminho. Parece que, nesse caso, você deseja que seu comportamento de cache padrão aponte para o bucket, que enviará todas as solicitações para lá, se não corresponder a outro comportamento de cache.

and last but not least requests to mydomain.com/api/... will redirect to the ec2 instance which holds my REST API node.js server

Presumivelmente, você não quer dizer "redirecionar", mas sim "encaminhar" ou "proxy" (mesma coisa) para a instância do EC2.

Declare a instância do EC2 como outra origem na distribuição do CloudFront para o seu site. Crie um novo comportamento de cache que corresponda ao padrão de caminho /api/* que usa essa origem, e o CloudFront enviará essas solicitações à sua instância do EC2.

Certifique-se de que seu código no EC2 retorne os cabeçalhos Cache-Control: apropriados nas respostas da API para que o CloudFront os armazene em cache por um período de tempo apropriado ou não retorne Cache-Control: no-cache .

Observe que, nos padrões de caminho de comportamento do cache, uma barra inicial ausente é implícita, portanto, api/* é equivalente a /api/* .

Observe também que o CloudFront tem uma configuração chamada "caminho de origem", um atributo da origem, que às vezes é confundido com "padrão de caminho", que é um atributo dos comportamentos de cache. Deixe o "caminho de origem" em branco, porque ele não está relacionado aos caminhos que você deseja enviar para uma origem específica.

    
por 06.06.2016 / 12:56