web-dev-qa-db-ja.com

AWS Elastic BeanstalkのNginx confでclient_max_body_sizeを増やす

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

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

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

105
Nick Parsons

これには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ファイルには、トリックを行う1つのライナーclient_max_body_size 20M;が含まれています。

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

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

http://wiki.nginx.org/Configuration

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

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

セキュリティのために上記の答えを変更しました(そして構文が間違っていました、YAMLの2つの 'owner:'エントリを参照)、みんな、何にも777の許可を設定しないでください。ハッキングを楽しんで、Nginx構成ファイルの所有者をrootに設定しない限り。

回答の下 も参照して、nginxが展開後にこの変更をピックアップするようにします。

32
user3217794

編集:Nick Parsonsが承認した回答の指示を使用してビルドをデプロイしたら、nginxサーバーを再起動して変更を反映する必要がある場合があります。

これを行うには、インスタンスにsshを実行します

Sudo service nginx reload

再読み込みの詳細については、 http://nginx.org/en/docs/beginners_guide.html を参照してください。

Elastic Beanstalkの以前のバージョンでは、これを達成するためにcontainer_commandを追加できましたが、@ cdmckayなどのように、これによりデプロイメントエラーが発生することがわかりました。環境を再構築すると、その指示が設定ファイルにある限り、client_max_body_size設定が取得されます。

21
Will

JVMベースのアプリを持っているので、受け入れられた答えは私にとってはうまくいきませんでした。NGINXの設定は異なるようです。デプロイ中にproxy.confファイルが作成されますが、デプロイが完了する前に後で削除されます。 AWSドキュメントでは、 プロキシを設定する の方法を説明しています:

.ebextensions/nginx/conf.d/proxy.conf行のみを含むファイル:client_max_body_size 40M;

14
Raymond26

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

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

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

これは、ebインスタンスにsshし、コマンドを使用して手動で実行するよりも良い方法です。

受け入れられた答えと組み合わせて、私にとって同じ問題を解決しました。 (レール、プーマ、NGINX)

8
ConorB

受け入れられた答えは私にとってはうまくいかなかったので、代わりに私は自分でnginx設定を上書きしました。

ディレクトリnginx.confの下に.ebextensions/nginx/というファイルを作成しました

Beanstalkアプリの実行中のインスタンスにSSHで接続し、nginx.confを使用して端末からコピーして、cat /etc/nginx/nginx.confファイルの内容をコピーしました。

nginx.confで以前に作成した.ebextensions/nginx/ファイルに内容を貼り付け、httpディレクティブを変更してclient_max_body_size 50M;を含めました。最終的にeb deployを使用してアプリを再デプロイし、機能しました。展開中に次のメッセージが表示されます。

情報: '.ebextensions/nginx'ディレクトリで検出されたNginx構成。 AWS Elastic Beanstalkは、この環境のNginx設定を管理しなくなります。

これらは私の.ebextensions/nginx/nginx.confファイルの内容です:

# Elastic Beanstalk Nginx Configuration File

user                    nginx;
error_log               /var/log/nginx/error.log warn;
pid                     /var/run/nginx.pid;
worker_processes        auto;
worker_rlimit_nofile    33193;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    include       conf.d/*.conf;

    map $http_upgrade $connection_upgrade {
        default     "upgrade";
    }

    server {
        listen        80 default_server;
        access_log    /var/log/nginx/access.log main;

        client_header_timeout 60;
        client_body_timeout   60;
        keepalive_timeout     60;
        gzip                  off;
        gzip_comp_level       4;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        # Include the Elastic Beanstalk generated locations
        include conf.d/elasticbeanstalk/*.conf;
    }

    client_max_body_size 50M;
}

Nginxサービスも環境も再起動する必要はありませんでした。

:.ebextensionsが、デプロイメント中にBeanstalkに作成およびアップロードされる.Zipファイルの一部であることを確認します(使用している場合、.gitignoreまたは.ebignoreで無視されません) )。

3
kskyriacou

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

2
David Smits

私のために働いた唯一のことは、このような.ebextensions内に「.config」ファイルを作成することでした:

.ebextensions/
           proxy.config

.configファイルにこのコンテンツのみが含まれる場合:

files:
  "/etc/nginx/conf.d/proxy.conf":
     content: |
       client_max_body_size 50M;

サブフォルダーは不要、アプリケーションサーバーを再起動する必要はありません。ebextensions内の「.conf」ファイルではなく「.config」ファイルであり、適切なインデントを使用してawsコンソールのエラーを回避します。ファイルの名前は関係ありませんが、

おかげで: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/

2
Ed Vieira

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.ebextensions/nginx/conf.d/ファイルを作成しました。

client_max_body_size 20M;

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

1
pascal

Javaプラットフォームの場合

NGINX構成プロキシファイルを作成するには、追加するだけです

.ebextension/nginx/conf.d/proxy.confファイル

コンテンツclient_max_body_size 20M; 初期化。

「proxy.conf」は「/etc/nginx/conf.d/proxy.conf」にデプロイされ、NGINX構成によって自動的に組み込まれます。

0
Lyudmyla