AWS Elastic Beanstalk,Rails,Carrierwave-413请求实体太大

时间:2015-11-04 23:23:46

标签: ruby-on-rails amazon-web-services amazon-s3 amazon-ec2 elastic-beanstalk

我在AWS Elastic Beanstalk上托管了一个Rails / Postgres应用程序。一个表单将数据发布到我的应用程序还允许用户选择多张照片,其中照片在同一请求中使用Carrierwave直接上传到Amazon S3。虽然它在开发中起作用,但它会导致“请求实体太大”。生产中的错误。

我尝试使用相关Stack Overflow帖子的一些建议来配置我的应用,以增加请求的最大正文大小,但似乎没有任何效果。不确定我是否应该使用容器命令。不知道那是做什么的。

.ebextensions/01_files.config

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

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

3 个答案:

答案 0 :(得分:0)

我使用自己的基于docker的配置遇到了同样的问题 并且为我清除它的变化是添加

client_max_body_size 20M;

在我的容器的nginx的nginx.conf文件的每个级别。

然而,我的nginx.conf比你的更精细。 我不明白你的如何只使用http条款。

这是我的nginx.conf的样子:

upstream myapp {
  server unix:///var/run/myapp.sock;
}

  client_max_body_size 20M;

        server {
          listen 80;
          server_name mayapp.com;

          # path for static files
          root /usr/src/app/public;

          location / {
              try_files $uri @proxy;
              client_max_body_size 20M;
          }

          location @proxy {
              proxy_pass  http://myapp;
              proxy_set_header Host      $host;
              proxy_set_header X-Real-IP $remote_addr;
              client_max_body_size 20M;
          }

          client_max_body_size 20M;
        }

答案 1 :(得分:0)

两种非常常见的解决方案都不适用于我 - 使用。

添加proxy.conf文件
client_max_body_size 20M;

或与。

相同的proxy.conf文件
http {
      client_max_body_size 20M;
    }

第一个实际上没有删除413响应代码/ work&重新启动nginx时的第二个返回错误,指出它是一个错误的指令。

"http" directive is not allowed here in /etc/nginx/conf.d/proxy.conf:1

我不喜欢我的解决方案,但它确实摆脱了413s ...在/etc/nginx/conf.d中有一个名为webapp.conf的符号链接文件 - 我用ebextension文件覆盖了它。该文件似乎非常静态,但这将破坏弹性beanstalk补丁对文件的任何更改。提前计划!

我修改后的文件如下所示(请注意最后一行)复制自己的文件以防它们不同。

.ebextensions/01_files.config
files:
  "/etc/nginx/conf.d/webapp.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
   upstream my_app {
      server unix:///var/run/puma/my_app.sock;
    }

    server {
      listen 80;
      server_name _ localhost; # need to listen to localhost for worker tier

      location / {
        proxy_pass http://my_app; # match the name of upstream directive which is defined above
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }

      location /assets {
        alias /var/app/current/public/assets;
        gzip_static on;
        gzip on;
        expires max;
        add_header Cache-Control public;
      }

      location /public {
        alias /var/app/current/public;
        gzip_static on;
        gzip on;
        expires max;
        add_header Cache-Control public;
      }

     client_max_body_size 100M;
    }

答案 2 :(得分:0)

我通过提供自己的nginx配置文件解决了这个问题,并在a similar question上发布了详细的答案。