【发布时间】:2018-12-30 07:24:26
【问题描述】:
我正在尝试在 AWS 上实施一个 CMS,主要使用免费层级服务,并且正在使用 PHP,并且已经在学校使用 PHPMyAdmin 实施了这个。
问题:
我想使用 RDS 来做到这一点,但我想出了一个非常奇怪的问题。
当我将我的网站上传到 Elastic Beanstalk 并尝试从那里连接到数据库时,我面临着非常长的等待时间。有时它会因等待时间过长而返回错误 504。
不过,这不是数据库速度的问题。我知道这一点是因为 我可以在 localhost 上运行此代码,它的工作原理完全符合预期(见图)
加载只需半秒!
我认为正在发生的事情:
在 Elastic Beanstalk 中执行时,一定发生了一些事情。我不太清楚是什么,但它需要的时间太长了。
额外信息:
我使用以下代码连接到数据库(凭据被欺骗):
$conn = mysqli_connect("mydb.cebelvm3fa0n.ca-central-1.rds.amazonaws.com","USERNAME","PASSWORD","mydb");
我的数据库和 EL 实例都是从 ca-central 运行的。连接没有失败,它需要很长时间。
失败的页面是http://howardpearce.ca/posts.php
如果您对它可能是什么有任何想法,我将非常感激。谢谢!
注意:
我将发布我的代码的某些部分,但创建 MCVE 确实是 不可行,因为我必须提供我的数据库密码,你会 需要重新创建我的 AWS 环境,所以请不要要求一个,我 可以随时提供更多细节。
【问题讨论】:
-
你检查过弹性豆茎日志吗?在 Web 控制台的日志记录部分,您可以请求最后 100 行日志。他们可能有一些线索。另外,它有时真的会成功吗? IE。确定不是防火墙问题?
-
它之前已经成功了,但那是它在每个页面上加载数据库的时候。它现在超时了,因为在帖子上它也在尝试一些选择查询以及连接。我去看看日志,谢谢!
-
我检查了日志,最明显的是得到了错误
PHP Warning: mysqli_connect(): (HY000/2002): Connection timed out in /var/app/current/posts.php on line 3,当搜索到stackoverflow.com/questions/42051976/… -
我现在明白了...我没有允许来自服务器的连接的安全组。现在就开始吧,如果解决了,我会发布答案。
-
仅供 AWS 新手参考,如果您的数据库和应用程序有不同的服务器,您可以通过将服务器部署在同一个归置组中获得更低的延迟优势。
标签: php amazon-web-services amazon-elastic-beanstalk amazon-rds