aws beanstalk nodejs:如何覆盖 nginx 的 60 秒超时

Posted

技术标签:

【中文标题】aws beanstalk nodejs:如何覆盖 nginx 的 60 秒超时【英文标题】:aws beanstalk nodejs: how to override 60s timeout of nginx 【发布时间】:2020-12-19 15:52:28 【问题描述】:

我想在 AWS elastic beanstalk 的 nodejs 环境中增加 nginx 的默认超时,我正在遵循本指南:https://medium.com/swlh/using-ebextensions-to-extend-nginx-default-configuration-in-aws-elastic-beanstalk-189b844ab6ad 但它不起作用,如果我上传我的应用程序我收到此错误 Unsuccessful command execution on instance id(s) 'i-xxxxxxxxxxxx'。中止操作。有什么建议吗? 我正在尝试使用 .ebextension,这是我的 01-timeout.config 文件的代码

files:
"/etc/nginx/conf.d/01-timeout.conf":
 mode: “000644”
 owner: root
 group: root
 content: |
   keepalive_timeout 600s;
   proxy_connect_timeout 600s;
   proxy_send_timeout 600s; 
   proxy_read_timeout 600s; 
   fastcgi_send_timeout 600s; 
   fastcgi_read_timeout 600s;
container_commands:
  nginx_reload:
   command: "sudo service nginx reload"

感谢您的帮助。

更新现在部署没问题,但是超时不起作用,就像之前的60s超时一样,阅读日志似乎是nginx的重新加载,这是消息: 命令 nginx_reload 成功,有什么问题的线索吗?

【问题讨论】:

检查你的弹性beantalk日志,你可能会发现命令失败的原因,或者nginx_reload之前可能缺少一个空格但不确定。 你是对的,我发现了这个错误:2020/08/31 13:19:40 [emerg] 18127#0: unknown directive "files:" in /var/proxy/staging/nginx/ conf.d/01-timeout.conf:7 但我该如何解决呢? 可能是缩进,尝试将files:内容缩进两个空格,同时缩进/etc/nginx.... 下的所有内容,除了container_commands 【参考方案1】:

请这样尝试:

files:
  "/etc/nginx/conf.d/01-timeout.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      keepalive_timeout 600s;
      proxy_connect_timeout 600s;
      proxy_send_timeout 600s; 
      proxy_read_timeout 600s; 
      fastcgi_send_timeout 600s; 
      fastcgi_read_timeout 600s;

container_commands:
  nginx_reload:
    command: "sudo service nginx reload"

【讨论】:

我试过你的 sn-p 但不幸的是应用程序部署失败 它是否因同样的错误而失败?另外,也许您应该使用" 而不是 代替000644 你是对的!!问题是 000644 的双引号字符!您的解决方案完美无缺!!非常感谢 更新:现在部署正确但是超时不起作用,就像之前超时一样,阅读日志似乎是重新加载nginx它所做的,这是消息:命令nginx_reload成功,任何有什么问题的线索?【参考方案2】:

.ebextension 方法现在不起作用。请尝试.platform 方法。

请在您的项目根文件夹中创建一个名为.platform 的文件夹。

.platform/
         nginx/
              conf.d/
                    timeout.conf
         00_myconf.config

文件 1 的内容 - timeout.conf(在 .platform/nginx/conf.d/ 文件夹内)

keepalive_timeout 600s;
proxy_connect_timeout 600s;
proxy_send_timeout 600s; 
proxy_read_timeout 600s; 
fastcgi_send_timeout 600s; 
fastcgi_read_timeout 600s;

文件 2 的内容 - 00_myconf.config(在 .platform/ 文件夹内)

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

重新上传您的应用程序并查看更改。

【讨论】:

这个解决方案对我不起作用。更改生效前是否有等待期?谢谢。 请您检查并确认文件的扩展名(.conf和.config) 是的,我已经检查过了,它们有各自的扩展名(.conf 和 .config)【参考方案3】:

您的/etc/nginx/conf.d/01-timeout.conf 将被忽略,因为这是基于 Amazon Linux 1 (AL2) 的 EB 平台的有效文件。但是,在我看来,您正在使用基于 EB 的新的当前版本的 Amazon Linux 2 (EB)。

对于 AL2,nginx 设置应在 .platform/nginx/conf.d/ 中,而不是在 .ebextentions 中,如“反向代理配置”部分中的 docs 所示。

因此,您可以拥有以下 .platform/nginx/conf.d/myconfig.conf 的内容:

keepalive_timeout 600s;
proxy_connect_timeout 600s;
proxy_send_timeout 600s; 
proxy_read_timeout 600s; 
fastcgi_send_timeout 600s; 
fastcgi_read_timeout 600s;

无法使用 sudo service nginx reload 手动重启 nginx。

【讨论】:

以上是关于aws beanstalk nodejs:如何覆盖 nginx 的 60 秒超时的主要内容,如果未能解决你的问题,请参考以下文章

AWS Beanstalk 在部署 Nodejs 应用程序时如何使用 NPM?

如何在 AWS Elastic Beanstalk 上的 Nodejs 应用程序上启用大文件的上传?

AWS Elastic Beanstalk - 如何在同一个 ec2 实例中运行 php 和 nodejs

通过 ACM 和负载均衡器为 aws Nodejs 弹性 beanstalk 设置了 HTTPS,我如何在 s3 存储桶中为 Angular 设置 HTTPS

AWS Elastic Beanstalk - NodeJS:在没有 Beanstalk 负载均衡器的情况下从 Letsencrypt 获取证书 SSL

如何将 node.js 应用程序部署到 AWS Elastic Beanstalk