173

AWS Elastic Beanstalk で実行されている API に 10 MB を超えるファイルを送信すると、「413 Request Entity Too Large」エラーが発生します。

私はかなりの調査を行い、Nginx のclient_max_body_sizeを増やす必要があると考えていますが、Elastic Beanstalk を使用してこれを行う方法に関するドキュメントを見つけることができないようです。私の推測では、ebetension ファイルを使用して変更する必要があります。

どうすれば制限を引き上げることができるかについて考えている人はいますか? 10MB はかなり弱いので、これを手動で増やす方法が必要です。

4

25 に答える 25

252

これには 2 つの方法があります。残念ながら、一部の EB アプリケーション タイプで機能するものもあれば、他のタイプで機能するものもあります。

AWS ドキュメントでサポート/推奨

Java SEGoNode.js 、およびおそらく Ruby (Ruby については文書化されていませんが、他のすべての Nginx プラットフォームはこれをサポートしているようです)などの一部のアプリケーション タイプでは、Elasticbeanstalk には Nginx の構成方法が組み込まれています。

Elastic Beanstalk のデフォルトの nginx 設定を拡張するには、.conf 設定ファイルを.ebextensions/nginx/conf.d/アプリケーション ソース バンドルで指定されたフォルダに追加します。Elastic Beanstalk の nginx 設定には、このフォルダーに .conf ファイルが自動的に含まれます。

~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- web.jar

リバース プロキシの設定 - Java SE

特にアップロードの最大サイズを大きくするには、.ebextensions/nginx/conf.d/proxy.conf本文の最大サイズを任意のサイズに設定してファイルを作成します。

client_max_body_size 50M;

Nginx 構成ファイルを直接作成する

他のいくつかのアプリケーション タイプについては、多くの調査と素晴らしい AWS サポート チームとの何時間もの作業の後.ebextensions、nginx 構成を補足する構成ファイルを内部に作成しました。この変更により、より大きなポスト ボディ サイズが可能になりました。

ディレクトリ内に、次の内容.ebextensionsのファイルを作成しました。01_files.config

files:
    "/etc/nginx/conf.d/proxy.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
           client_max_body_size 20M;

これにより、/etc/nginx/conf.d ディレクトリ内に proxy.conf ファイルが生成されます。proxy.conf ファイルclient_max_body_size 20M;には、トリックを実行する 1 つのライナーが含まれているだけです。

一部のプラットフォームでは、このファイルはデプロイ中に作成されますが、その後のデプロイ フェーズで削除されることに注意してください。

Nginx のドキュメントで概説されている他のディレクティブを指定できます。

http://wiki.nginx.org/Configuration

これが他の人に役立つことを願っています!

于 2013-09-23T04:19:49.620 に答える
9

受け入れられた回答に続いて、nginx 構成ファイルをリロードする必要がある場合があります。

これを行うには、次のコマンドを追加します

   container_commands:
      01_reload_nginx:
        command: "service nginx reload"

これは、eb インスタンスに SSH で接続し、コマンドを使用して手動で実行するよりも優れた方法です。

これは、受け入れられた回答と組み合わせて、同じ問題を解決しました。(Rails、Puma、NGINX)

于 2016-10-03T10:47:11.303 に答える
5

これはAWS が提供するソリューションであり、機能します (必要に応じてサイズを調整してください)。

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/12_add_nginx_configuration.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      /bin/echo "client_max_body_size 50M;" > /etc/nginx/conf.d/proxy.conf
      /sbin/service nginx reload
于 2020-01-08T16:39:43.527 に答える
3

Docker を使用しない Golang の場合、aws doc の次の手順に従いました。

リバース プロキシの構成

nginx.conf http ブロック内のディレクティブに加えてディレクティブを含めたい場合は.ebextensions/nginx/conf.d/、ソース バンドルのディレクトリに追加の構成ファイルを提供することもできます。このディレクトリ内のすべてのファイルには、拡張子 .conf が必要です。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html#go-complex-apps

プロジェクトのルートにファイルを作成しましたproxy.conf。内部には1行だけです。.ebextensions/nginx/conf.d/

client_max_body_size 20M;

それでもうまくいかない場合は、.ebextensionsフォルダーとサブフォルダーが展開 zip に含まれていることを確認してください。Nginx を手動で再起動する必要はありません。

于 2017-03-24T05:34:35.303 に答える
2

または、プロキシ サーバーを Apache に変更することもできます。これを行うには、構成に移動し、ソフトウェア構成を編集します。ここでの最初のオプションは「プロキシサーバー」で、「apache」を選択します。

于 2016-05-30T10:28:01.893 に答える
1

上記のオプションのいずれかが機能する場合と機能しない場合があります。

...しかし、proxy.config ファイルの行末が正しくない場合、AWS はコードをインスタンスにデプロイしようとするとエラーになります。

.platform/nginx/conf.d/proxy.config ファイルを作成しましたが、Windows プラットフォームでコードを開発およびビルドしているため、行末は Windows (CRLF) に設定されています。

しかし、私たちの AWS インスタンスはすべて Linux であり、Unix (LF) の末尾を想定しています。

そのため、Linux がファイルを読み込もうとしたとき、失敗しました...イベントやログに適切なエラーが表示されることさえなく、失敗したとだけ表示されました。

他に何も機能しないかどうかを確認する最後のことかもしれません:)

于 2021-10-12T15:04:34.223 に答える