在AWS Elastic Beanstalk中自定义Nginx配置

时间:2015-01-28 21:21:54

标签: ruby-on-rails amazon-web-services nginx elastic-beanstalk amazon-elastic-beanstalk

我在Ruby 2.0 / Puma实例上运行rails应用程序,并尝试自定义nginx配置。我需要增加允许的请求大小以允许文件上传。我发现了其他一些帖子让我将其添加到我的.ebextensions中:

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      client_max_body_size 70M;

这确实按预期创建了文件,但在我手动重启nginx之前它似乎无法工作。因此,我试图找到一种方法,用.ebextensions命令重新启动nginx,但没有取得任何成功。有没有人知道用.ebextensions重新启动nginx的方法,或者知道更好的方法来解决这个问题?

7 个答案:

答案 0 :(得分:12)

我找到了一种在部署后使用未记录的技术运行部署后脚本后重启nginx的方法。我把它添加到我的.ebextensions:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      service nginx restart

答案 1 :(得分:4)

要重新加载nginx配置,您可以使用container_commands

来自http://www.infoq.com/news/2012/11/elastic-beanstalk-config-files

  

container_commands键允许您为容器执行命令。它们在应用程序和Web服务器已设置并且应用程序已解压缩但在部署应用程序之前运行。 container_commands按名称按字典顺序处理。

container_commands:
  01_reload_nginx:
    command: "service nginx reload"

答案 2 :(得分:3)

我的回复可能有点晚了,但我发现了另一种不那么干扰的方法来在Elastic Beanstalk上配置nginx。 您可以通过创建mat目录直接为nginx指定配置文件。在EB部署期间,内部找到的任何配置文件都会自动复制到.ebextensions/nginx/conf.d目录。 这似乎是一个更强大的解决方案。

此处提供的文档: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-nginx.html

编辑:正如评论中所指出的,Elastic Beanstalk在平台之间存在不一致的实现。此处的文档适用于Java SE,看来此文档与所有平台无关。

答案 3 :(得分:1)

这是我的配置并为我工作。你必须将它包含在http块中。

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
        http {
          client_max_body_size 20M;
        }

答案 4 :(得分:1)

以下对我有用(我将 HTTP 有效负载增加到 100M - 如果您想增加到其他大小,请进行调整):

files:
  "/etc/nginx/conf.d/proxy.conf":
    mode: "000755"
    owner: root
    group: root
    content: |
      client_max_body_size 100M;
  "/opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      service nginx restart

答案 5 :(得分:0)

我让它像这样工作。在应用程序部署之前,无需重新启动或重新加载nginx,因为commands(而不是container_commands)符文。

commands: 
  01-get-nginx-conf-file:
    command: "aws s3 cp s3://somepath/nginx.conf /home/ec2-user"
  02-replace-default-nginx-config:
    command: "cp /home/ec2-user/nginx.conf /etc/nginx/nginx.conf"

答案 6 :(得分:0)

我在将Docker部署到Elastic Beanstalk中时遇到了类似的情况。我可以通过以下单个配置文件解决更改以及nginx重载:<app>/.ebextensions/increase_upload_size.config,包括以下代码:

container_commands:
  01_reload_nginx:
    command: "sudo service nginx reload"

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      client_max_body_size 20M;

当我在EB中执行“上传和部署”时,便实现了更改。