Skip to main content
 首页 » 编程设计

python之AWS EB docker 应用程序 : why to configure nginx twice

2025年05月04日25linjiqin

我在 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 两次:

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