【发布时间】:2016-03-27 20:53:42
【问题描述】:
我在 AWS Elasticbeanstalk 上有一个 docker 容器应用程序。当我第一次遇到文件太大的问题时,我通过额外的 nginx-configuration 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 我收到了来自用 gcc RedHat 编译的 nginx/1.8.0 的响应。
会不会是 AWS EC2 nginx 配置的问题?
请求如何通过系统传递到 AWS EB 上的应用程序?带有 nginx/1.8 的 AWS EC2 处理请求并将其重定向到 nginx/1.4.3 再次处理它的 Docker 应用程序?所以我需要设置
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 的“正确方法”是什么?
【问题讨论】:
-
您是如何“手动”配置 AWS EC2 上的设置的? UI 中是否有 Elastic Beanstalk 设置或可通过 .ebextensions 更改?您是否必须自己通过 SSH 连接到 EC2 实例?还是别的什么?
-
我在 EC2 上使用 SSH 将
client_max_body_size 500m;添加到/etc/nginx/nginx.conf文件中。我对 Docker 容器也是如此。我也为 EC2 nginx 做同样的事情。所以我做了两次,不确定它是正确的方法。
标签: python amazon-web-services nginx amazon-ec2