【问题标题】:AWS EB docker app: why to configure nginx twice?AWS EB docker app:为什么要配置两次 nginx?
【发布时间】: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:

  1. 在 docker 容器中
  2. 在 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


【解决方案1】:

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;

【讨论】:

猜你喜欢
  • 2017-05-28
  • 2017-01-09
  • 2014-03-13
  • 2021-01-28
  • 1970-01-01
  • 2015-08-06
  • 2021-11-29
  • 2019-02-23
  • 2015-03-05
相关资源
最近更新 更多