在弹性 beantalk 上自定义 nginx.conf

Posted

技术标签:

【中文标题】在弹性 beantalk 上自定义 nginx.conf【英文标题】:Customizing nginx.conf on elastic beanstalk 【发布时间】:2018-12-27 12:30:39 【问题描述】:

我需要在/etc/nginx/nginx.conf 文件中自定义keepalive_timeout 设置,该文件当前在弹性beantalk ec2 实例上默认为65

我遵循了following 的描述,但是当我部署新代码时,我得到如下 nginx 错误:

[emerg] 4551#0:“keepalive_timeout”指令是 在 /etc/nginx/conf.d/proxy.conf:2 中重复

后来我尝试使用 sed 直接更新 nginx.conf 如下

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      client_max_body_size 200M;
      client_header_timeout   300;
      client_body_timeout     300;
      send_timeout            300;
      proxy_connect_timeout   300;
      proxy_read_timeout      300;
      proxy_send_timeout      300;
container_commands:
  01_update_nginx:
    command: "sudo sed -i 's/keepalive_timeout  65;/keepalive_timeout  360;/g' /etc/nginx/nginx.conf"
  02_restart_nginx:
    command: "sudo service nginx reload"

哪个不再起作用(值没有被替换)。所以我正在寻找更新/自定义nginx.conf 文件的正确方法。我试过something like this 这给了我一个错误,例如:

服务:AmazonCloudFormation, 消息:[/Resources/AWSEBAutoScalingGroup/Metadata/AWS::CloudFormation::Init/prebuild_0_appname/files//opt/elasticbeanstalk/#etc#nginx#custom-nginx.conf] 模板中不允许使用“null”值

【问题讨论】:

【参考方案1】:

如果你想走这条sed 路线,命令应该是这样的:

01_update_nginx:
  command: "sudo sed -i 's/keepalive_timeout  65;/keepalive_timeout  360;/g' /tmp/deployment/config/#etc#nginx#nginx.conf"

这是 Beanstalk 用来替换默认文件的实际 nginx.conf(以及其他,例如 00_elastic_beanstalk_proxy.conf)的位置。

不需要02_restart_nginx 命令,您可以删除该命令(截至 2019 年 8 月)。

我在 Beanstalk 环境中测试了这个,Node.js 在 64 位 Amazon Linux/4.8.2 上运行。总的来说,它看起来有点老套,您可能需要咨询 AWS 支持以了解自定义 nginx.conf 的“官方”方式。

【讨论】:

以上是关于在弹性 beantalk 上自定义 nginx.conf的主要内容,如果未能解决你的问题,请参考以下文章

如何在弹性beantalk docker json中定义多个任务

如何在弹性 beantalk 负载均衡器中设置自定义标头相关规则

配置弹性beantalk以使用新版本的python

将现有 EC2 实例附加到弹性 beantalk

为啥我的弹性 beantalk 实例在我部署时被替换?

如何使用弹性 beantalk 中的 express.js 进行反应构建?