在 Elastic Beanstalk 上运行时如何获取服务器 URL?
Posted
技术标签:
【中文标题】在 Elastic Beanstalk 上运行时如何获取服务器 URL?【英文标题】:How to get server URL when running on Elastic Beanstalk? 【发布时间】:2015-04-17 16:08:00 【问题描述】:我使用restify 创建部署到 Elastic Beanstalk 的节点 API。
var server = restify.createServer( name: 'My API' );
server.listen(process.env.PORT || 1704, function()
console.log('%s listening at %s', server.name, server.url);
);
在本地运行时,我看到:
我的 API 在 http://0.0.0.0:1704 监听
但是,在 Elastic Beanstalk 上运行时,日志显示:
我的 API 在 http://0.0.0.0:8081 监听
这是为什么呢?
为什么server.url
不是http://my-api.elasticbeanstalk.com
?
我怎样才能获得真正的 URL(类似于http://my-api.elasticbeanstalk.com
)?
【问题讨论】:
【参考方案1】:elastic beanstalk 节点应用程序配置为在内部运行在 8081 上。你可以在node.conf
看到它:
upstream nodejs
server 127.0.0.1:8081;
keepalive 256;
现在 8081 只是内部端口。如果你检查这个 conf 文件,你会发现外部端口实际上是 8080,你的 ELB 将指向端口 80。我希望它不会太混乱 :)
至于您的 env URL,您可以从桌面发出 eb status
命令来查看 CNAME。它也是在 EB Web 控制台中编写的。
【讨论】:
我需要知道节点应用程序本身的完整 URL 才能构造响应标头(例如Location: http://my-api.elasticbeanstalk.com/my-resource
)。 req.url
给了我/my-resource
位,但我不确定如何获得http://my-api.elasticbeanstalk.com
位。有什么想法吗?
你的意思是编程吗?我相信“my-api”名称有一个环境变量,您可以附加到该“elasticbeanstalk.com”。查看 EB_* 环境变量。
显然,没有环境变量可以给我my-api
位。 Here 是所有环境变量的列表。我可以从哪里得到它的任何其他想法?
我想唯一的选择是手动添加它,然后在服务器中获取它。您可以在桌面上使用eb setenv
命令,然后它应该在即将到来的实例中显示为变量。
我希望动态获得my-api
位,而无需明确设置。我最终做了:'http://' + req.headers.host
以上是关于在 Elastic Beanstalk 上运行时如何获取服务器 URL?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS Elastic Beanstalk 上运行 celery worker?
在 Elastic Beanstalk 上运行 .config 文件?
在 AWS Elastic Beanstalk 上运行临时脚本
Celery 可以在 Elastic Beanstalk 上运行吗?