【问题标题】:How to get server URL when running on Elastic Beanstalk?在 Elastic Beanstalk 上运行时如何获取服务器 URL?
【发布时间】: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)?

【问题讨论】:

    标签: node.js amazon-web-services amazon-ec2 amazon-elastic-beanstalk restify


    【解决方案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
    猜你喜欢
    • 2013-06-13
    • 2019-05-11
    • 1970-01-01
    • 2020-10-30
    • 2013-01-01
    • 2017-02-25
    • 1970-01-01
    • 2016-11-28
    • 2020-12-28
    相关资源
    最近更新 更多