我在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;
}
答案 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上发布了详细的答案。