4

我有一個託管在AWS Elastic Beanstalk上的Rails/Postgres應用程序。一種向我的應用發佈數據的表單還允許用戶選擇多張照片,其中照片是通過使用Carrierwave在相同請求中直接上傳到Amazon S3的。雖然它在開發中工作,但它在生產中會拋出'413請求實體太大'的錯誤。AWS Elastic Beanstalk,Rails,Carrierwave- 413請求實體太大

我試着配置我的應用程序的一些相關堆棧溢出帖子的建議,以增加請求的最大體大小,但似乎沒有工作。不知道我是否應該使用容器命令。不知道那是做什麼。

.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; 
     } 
+0

你有沒有碰運氣?我在同一條船上 –

+0

不是......我最終只是用一種不同版本的Carrierwave工作。這是一個相當惱人的問題,從來沒有得到解決 – wangg131

回答

0

我面對用我自己的基於泊塢窗的配置 並且清除它爲我改變這個同樣的問題是在nginx.conf文件中添加

client_max_body_size 20M; 

在各個層面爲我容器的nginx。

但是,我的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; 
     } 
0

既不的非常普遍規定的解決方案爲我工作 - 將與proxy.conf文件。

client_max_body_size 20M; 

或與之相同的proxy.conf文件。

http { 
     client_max_body_size 20M; 
    } 

第一個沒有實際刪除413個響應代碼/工作&第二重新啓動nginx的時候返回以爲這是個糟糕的指令錯誤。

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

我不喜歡我的解決方案,但它沒有擺脫413s的......在/etc/nginx/conf.d有一個叫webapp.conf一個符號鏈接文件 - 我重寫了與一個ebextension文件。該文件似乎非常靜態,但是這將打破彈出式豆杆修補程序對文件所做的任何更改。未雨綢繆!

我修改後的文件看起來像下面(注意最後一行)複製你自己的以防萬一它們不同。

.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; 
    } 
+0

輸入後,我真的不喜歡解決方案,所以我回去看看它。一個標準的proxy.conf,只有'client_max_body_size 20M';'將起作用 - 如果在寫入文件之後重新加載nginx - 否則在配置讀入之前啓動nginx - 在* proxy.conf寫入操作後添加一個運行*的容器命令,一切正常。 – Jeremiah