Estou com os erros "413 Request Entity Too Large" ao postar arquivos maiores que 10 MB em nossa API em execução no AWS Elastic Beanstalk.
Pesquisei bastante e acredito que preciso atualizar o client_max_body_size para o Nginx, mas não consigo encontrar nenhuma documentação sobre como fazer isso usando o Elastic Beanstalk. Meu palpite é que ele precisa ser modificado usando um arquivo ebetension.
Alguém tem pensamentos sobre como eu posso até o limite? 10 MB é muito fraco, tem que haver uma maneira de fazer isso manualmente.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
fonte
fonte
Respostas:
Existem dois métodos que você pode usar para isso. Infelizmente, alguns funcionam para alguns tipos de aplicativos EB e outros funcionam para outros.
Suportado / recomendado na documentação da AWS
Para alguns tipos de aplicativos, como Java SE , Go , Node.js e talvez Ruby (não está documentado para Ruby, mas todas as outras plataformas Nginx parecem oferecer suporte a isso), o Elasticbeanstalk possui um entendimento interno de como configurar o Nginx.
Para aumentar especificamente o tamanho máximo de upload, crie um arquivo
.ebextensions/nginx/conf.d/proxy.conf
configurando o tamanho máximo do corpo para o tamanho que você preferir:Crie o arquivo de configuração do Nginx diretamente
Após muita pesquisa e horas de trabalho com a maravilhosa equipe de suporte da AWS, criei um arquivo de configuração
.ebextensions
para complementar a configuração do nginx. Essa alteração permitiu um tamanho maior do corpo da postagem.Dentro do
.ebextensions
diretório, criei um arquivo chamado01_files.config
com o seguinte conteúdo:Isso gera um arquivo proxy.conf dentro do diretório /etc/nginx/conf.d. O arquivo proxy.conf simplesmente contém o liner
client_max_body_size 20M;
que faz o truque.Observe que, para algumas plataformas, esse arquivo será criado durante a implantação, mas removido em uma fase de implantação posterior.
Você pode especificar outras diretivas descritas na documentação do Nginx.
http://wiki.nginx.org/Configuration
Espero que isso ajude os outros!
fonte
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Não tenho certeza, mas parecia que seria necessário reiniciar o servidor..ebextensions
não está na.ebignore
e.gitignore
🖖 eu não tinha necessidade de reiniciar nginx serviço,eb deploy
e funcionou 🎉A resposta acima foi modificada por questões de segurança (e a sintaxe estava errada, veja, duas entradas 'owner:' na YAML), pessoal, por favor, não defina 777 permissões em QUALQUER COISA. A menos que você goste de ser hackeado e defina o proprietário dos arquivos de configuração do Nginx como root.
Consulte também a resposta abaixo para fazer o nginx capturar essa alteração após a implantação.
fonte
EDIT: Depois de implantar uma compilação com as instruções na resposta aceita por Nick Parsons, pode ser necessário reiniciar o servidor nginx para captar as alterações.
Para fazer isso, ssh na instância e faça
sudo service nginx reload
Para saber mais sobre como recarregar, consulte http://nginx.org/en/docs/beginners_guide.html .
Em uma versão anterior do Elastic Beanstalk, consegui adicionar um comando container_ para fazer isso, mas agora estou descobrindo, como @cdmckay, que isso causa uma falha na implantação. Se você reconstruir seu ambiente, ele selecionará as configurações client_max_body_size, contanto que essa instrução esteja no seu arquivo de configuração.
fonte
A resposta aceita não funcionou para mim, pois tenho um aplicativo baseado em JVM e parece fazer a configuração do NGINX de maneira diferente. Veria um arquivo proxy.conf sendo criado durante a implantação, mas depois excluído antes da conclusão da implantação. A documentação da AWS explica como configurar o proxy :
Crie um
.ebextensions/nginx/conf.d/proxy.conf
arquivo que contenha apenas a linha:client_max_body_size 40M;
fonte
/etc/nginx/conf.d/
Após a resposta aceita, pode ser necessário recarregar o arquivo de configuração nginx.
Para fazer isso, adicione o seguinte comando
Essa seria uma prática melhor do que colocar ssh em sua instância eb e fazê-lo manualmente com um comando.
Isso combinado com a resposta aceita resolveu o mesmo problema para mim. (Trilhos, Puma, NGINX)
fonte
A única coisa que funcionou para mim foi criar um arquivo ".config" dentro de .ebextensions como este:
com apenas esse conteúdo no arquivo .config:
não há necessidade de subpastas, não há necessidade de reiniciar o servidor de aplicativos, preste atenção que é um arquivo ".config" e não ".conf" dentro de .ebextensions e o uso de indentação adequada para evitar erros no console do aws, o resto é o mesmo não importa o nome do arquivo,
obrigado a: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
fonte
A resposta aceita não funcionou para mim, então substituí a configuração nginx por minha própria.
Criei um arquivo chamado
nginx.conf
sob o diretório.ebextensions/nginx/
Eu fiz o SSH em uma instância em execução do meu aplicativo Beanstalk e copiei o conteúdo do
nginx.conf
arquivo, usandocat /etc/nginx/nginx.conf
e copiando do terminal.Colei o conteúdo no
nginx.conf
arquivo que criei anteriormente.ebextensions/nginx/
e modifiquei a diretiva http para incluirclient_max_body_size 50M;
. Finalmente reimplantei meu aplicativo usandoeb deploy
e funcionou. Você deve receber a seguinte mensagem durante a implantação:Este é o conteúdo do meu
.ebextensions/nginx/nginx.conf
arquivo:Não precisei reiniciar o serviço nginx nem o ambiente.
Nota : Verifique se suas .ebextensions fazem parte do arquivo .zip criado e carregado no Beanstalk durante a implantação (não é ignorado
.gitignore
ou.ebignore
se você estiver usando).fonte
.ebextensions
que causou o fracasso da resposta popular e aceita. Eu não tentei tudo mais que você mencionada, mas graças para a nota 🍻Eu tentei todos os
.ebextensions
métodos de adição da configuração no nível de implementação e isso não me ajudou na mais recente Amazon Linux AMI. Eu fiz muita pesquisa e, depois de analisar os logs, posso encontrar o executor de tarefas de implantação.platform
procurando uma pasta chamada everytime e pensei em adicionar uma como as .ebextensions. Abaixo estão as configurações que eu fiz na minha pasta raiz do meu projeto.Adicione a configuração da pasta abaixo no nível raiz da sua pasta do projeto.
Estrutura da pasta (.platform / nginx / conf.d / proxy.conf)
Conteúdo do arquivo 1 - proxy.conf (
.platform/nginx/conf.d/
pasta interna )Conteúdo do arquivo 2 - 00_myconf.config (
.platform/
pasta interna )Cuidado completo com as extensões. O primeiro arquivo é .conf e o segundo arquivo é .config .
Agora reimplemente seu projeto no Amazon Elastic Beanstalk e você verá a mágica. Essa configuração será adicionada a todas as suas instâncias do EC2, criadas como parte do dimensionamento automático.
Estrutura detalhada da pasta abaixo.
fonte
.ebextensions
e somente essa abordagem funcionou.Esta é a solução fornecida pela AWS e funciona (ajuste o tamanho às suas necessidades)
fonte
Como alternativa, você pode alterar o servidor proxy para Apache. Para fazer isso, vá para Configuração e edite a configuração do software. A primeira opção aqui é "Servidor Proxy", selecione "Apache".
fonte
LimitRequestBody
?Para Golang sem Docker, segui estas instruções do aws doc:
Eu criei o arquivo
proxy.conf
na.ebextensions/nginx/conf.d/
raiz do meu projeto, com apenas uma linha dentro:Se ainda assim não funcionar, verifique se a
.ebextensions
pasta e as subpastas estão incluídas no zip de implantação. Não há necessidade de reiniciar o Nginx manualmente.fonte
Eu estava lutando com o mesmo problema, mas não consegui resolvê-lo, finalmente está funcionando.
aqui está o meu arquivo congfig,
A questão era,
Aqui estão meus poucos centavos,
fonte
Depois de três longos dias tentando descobrir isso, liguei para a incrível equipe de suporte da AWS e eles me deram algumas dicas sobre como resolvê-lo. Primeiro, meu projeto está em JAVA e eu uso o maven e a boot para executá-lo no Elastic Beanstalk (EBS).
Conforme explicado na documentação da AWS , você precisa ter as configurações personalizadas do nginx armazenadas no nível raiz do seu projeto. Para fazer isso, criei um arquivo client_max_body_size.conf e o coloquei no seguinte caminho: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Este arquivo contém apenas a seguinte linha:
Configure o maven para adicionar este arquivo na pasta raiz do meu projeto durante a compilação. Isso foi um pouco complicado, eu precisava adicionar a seguinte configuração ( fonte ) no meu POM.xml:
Agora você já pode criar seu projeto localmente e executar o seguinte comando SSH para validar se ele está realmente localizado na raiz do seu projeto:
Agora é a parte complicada. Quando você faz o upload para o EBS, seu arquivo deve conter apenas o arquivo SNAPSHOT.jar e a pasta .ebextensions. Por exemplo, se agora você compactar o arquivo jar e a pasta e carregá-lo manualmente, ele funcionará!
Como estou usando o Jenkins para minha implantação e, especificamente, o AWS EBS Deployment Plugin - é necessário alterar as configurações dos arquivos / pastas incluídos na implantação. Agora, por algum motivo, não consegui incluir a pasta .ebextensions, apenas excluí todo o resto, exceto a pasta e o arquivo .jar.
Isso funciona!
fonte
Além de client_max_body_size, eu tive que adicionar client_body_buffer_size . Aqui está o arquivo de configuração do ponto que funcionou, para um anexo de 2 MB:
fonte
Para plataforma Java
Para criar o arquivo proxy de configuração NGINX, basta adicionar
.ebextension/nginx/conf.d/proxy.conf
Arquivocom o conteúdo
client_max_body_size 20M;
nele."proxy.conf" será implantado em "/etc/nginx/conf.d/proxy.conf" e incluído automaticamente pela configuração do NGINX.
fonte
Se você estiver executando o EC2 e instalou o nginx, sua melhor solução é criar um novo arquivo no
pasta:
e adicione a seguinte linha lá:
salve e reinicie o nginx:
fonte