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