Koa 如何在后端里显示服务器的主机名(或域名)?

2016-07-01 13:54:06 +08:00
 DoraJDJ

标题可能写的不怎么好。

我想给自己用 Koa 写的 API 程序里弄一个和GitHub API 一样的 API 目录之类的东西,可是我不知道如何在后端里获取自己服务器的域名。

比如我的服务器的域名为 example.com ,那么内容应该是这样的:

{
  'example1': 'http://example.com/api/example1/',
  'example2': 'http://example.com/api/example2/'
}

而别人在使用我的项目时,域名为 qwertyu.io ,那么应该是这样的:

{
  'example1': 'http://qwertyu.io/api/example1/',
  'example2': 'http://qwertyu.io/api/example2/'
}

可是就在这域名上我不知道该怎么做,是要人工配置定义域名还是有其它的轮子可以这么做?

5429 次点击
所在节点    Node.js
18 条回复
rekulas
2016-07-01 14:01:33 +08:00
黑色主题怎么实现的
DoraJDJ
2016-07-01 14:02:32 +08:00
@rekulas 好像有的节点主题会不一样。
rekulas
2016-07-01 14:02:41 +08:00
koa 不了解,不过域名不是可以动态获取么
rekulas
2016-07-01 14:03:32 +08:00
@DoraJDJ 哦 我还以为 v2 的黑科技
sfree2005
2016-07-01 14:12:26 +08:00
这个吗?
request.headers.host
for8ever
2016-07-01 14:15:59 +08:00
你意思是服务器的域名和别人使用的域名不一样?
DoraJDJ
2016-07-01 14:17:47 +08:00
@for8ever 就是在域名不同的情况下显示的域名也跟着变。
rekulas
2016-07-01 14:21:01 +08:00
@DoraJDJ nodejs 不熟悉 request.rawHeaders[1] 貌似可以获取到
bigfei
2016-07-01 14:21:25 +08:00
使用 request.origin /request.host 都可以。
see http://koajs.com/#request
learnshare
2016-07-01 14:21:59 +08:00
写配置文件也可以吧,毕竟对外服务的时候,域名也都是外部程序管理的
kamikat
2016-07-01 14:31:09 +08:00
读 Host 头域是可以的 https://github.com/koajs/koa/blob/master/docs/api/request.md#requesthost

感觉还是写配置文件比较稳… 不同的域名的时候开不同的服务器实例用 nginx 做反向代理。
DoraJDJ
2016-07-01 14:33:40 +08:00
@sfree2005
@bigfei
刚才按照你们的方法试了一下,确实可以达到我的要求。
另外我想问一下,按照这样的方法在生产环境中使用会不会出现一些可能会发生的问题?
DoraJDJ
2016-07-01 14:34:52 +08:00
@kamikat 我用 Host 头获取域名的情况:
无反代:
```json
{"code":0,"links":{"get_blacklist":"http://localhost:8388/api/v0/blacklists"}}
```

Nginx 反代:
```json
{"code":0,"links":{"get_blacklist":"http://ako.yudachi/api/v0/blacklists"}}
```
sfree2005
2016-07-01 14:39:26 +08:00
@DoraJDJ 写入官方文档了 应该不会有什么问题。如果真有问题,你可以提交 bug 的~
kamikat
2016-07-01 14:41:39 +08:00
@DoraJDJ 也许是 nginx 配置在 server 块里有 proxy_set_header Host $host; 这样的话会把访问 nginx 的时候用的 host 设置到 Host 头域上,从 req.host 获取到的就是访问 nginx 的时候用的 Host 了(我觉得这个是期望的行为,理解有问题么?)
DoraJDJ
2016-07-01 14:43:17 +08:00
@kamikat 是的,我在本机里弄 Nginx 反代的时候确实有设置 Host 头:
```
server {
listen 80;
server_name ako.yudachi;

location / {
proxy_pass http://127.0.0.1:8388;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
```
说起来很奇怪,真的有人弄反代的时候不设置 Host 头吗?
kamikat
2016-07-01 14:45:04 +08:00
@DoraJDJ 给一个第三方的站点做反代的时候… 一般是不设置的(之前的回复是期望的效果么?)
whimsySun
2016-07-01 15:28:15 +08:00
this.origin

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/289591

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX