我在 AWS Elasticbeanstalk 上有一个 docker 容器应用程序。当我第一次遇到文件太大的问题时,我通过额外的 nginx 配置 client_max_body_size 500M; 解决了这个问题。但现在我在 AWS 上重新启动了一个实例,从 AWS 控制台更新了实例软件,我的应用程序再次提示 413 Request Entity Too Large。
我在本地机器上测试了 docker-container——一切正常。当我更改 client_max_body_size 时——它按预期工作。但是当我部署到 AWS EB 时,它会提示错误。
我注意到在本地机器上我收到了来自 nginx/1.4.3 (Ubuntu) 的响应。从 AWS 我收到了来自 nginx/1.8.0 的响应,该响应是使用 gcc RedHat 编译的。
会不会是 AWS EC2 nginx 配置的问题?
请求如何通过系统传递到 AWS EB 上的应用程序?带有 nginx/1.8 的 AWS EC2 处理请求并将其重定向到 Docker 应用程序,nginx/1.4.3 再次处理它?所以我需要设置
client_max_body_size两次?
那是应用程序的 Dockerfile:
FROM ubuntu
ENV DEBIAN_FRONTEND noninteractive
RUN echo "exit 0" > /usr/sbin/policy-rc.d
RUN apt-get update
RUN apt-get install -y libpq-dev python-dev
RUN apt-get install -y python-setuptools
RUN apt-get install -y python-virtualenv nginx gunicorn supervisor
RUN apt-get install -y rabbitmq-server
RUN easy_install pip
RUN mkdir -p /deploy/app
ADD requirements.txt /deploy/app/
RUN pip install -r /deploy/app/requirements.txt
COPY . /deploy/app
RUN rm /etc/nginx/sites-enabled/default
COPY flask.conf /etc/nginx/sites-available/
RUN ln -s /etc/nginx/sites-available/flask.conf /etc/nginx/sites-enabled/flask.conf
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
COPY upload_limit.conf /etc/nginx/conf.d/upload_limit.conf
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY gunicorn.conf /etc/supervisor/conf.d/gunicorn.conf
COPY rabbitmq.config /etc/rabbitmq/rabbitmq.config
EXPOSE 80 5000
CMD ["/usr/bin/supervisord"]
upload_limit.conf:
client_max_body_size 500M;
更新
现在我必须配置 nginx 两次:
- 在 docker 容器中
- 在 AWS EC2 上手动
之后就可以了。但我仍然想知道在不手动配置 AWS EC2 实例的情况下将应用程序部署到 AWS 的“正确方法”是什么?
请您参考如下方法:
Elastic Beanstalk (EB) 似乎在它提供的每个 EC2 实例上安装自己的 Nginx,它首先接受请求,然后将它们传递到已部署的 Docker 容器中。
因此,如果您的 Docker 容器有自己的 Nginx,它只会在 EB Nginx 首先收到请求后才接收连接。
要自动配置 EB Nginx 以增加最大请求正文大小,请使用 Dockerfile 将以下文件添加到 ZIP 文件中:
.ebextensions/nginx.config:
files:
'/etc/nginx/conf.d/proxy.conf':
mode: '000755'
owner: root
group: root
# Enable large uploads.
content: |
client_max_body_size 500M;
