如何在node.js中为用户创建子域

问题描述:

我想在我的应用程序的username.domain.com上共享一些用户信息。子域名在用户创建账户后应该可用。如何在node.js中为用户创建子域

我发现不错的模块,可以在这种情况下是有用的:Express Subdomain

如何得当使用这个模块,我可以做什么?也许这个模块不是很有用,所以我应该使用哪一个?

+1

我会推荐你​​在Node前面使用Nginx。 Nginx允许你处理子域而不会有任何问题。 – Curious

+0

此外,启动网络服务器需要监听80端口,这又需要root权限。由于安全考虑,以root权限启动节点是一种不好的做法。但是你可以(也应该)以root身份启动Nginx,并以普通用户身份启动Node。 – Curious

正如我在OP评论中提到的那样,在Node前面使用Nginx webserver是非常好的选择,因为这是侦听80端口的安全方式。您还可以更有效地为静态文件(脚本,样式,图像,字体等)提供服务,同时还可以在单​​个服务器中使用Nginx提供多个站点。

至于你的问题,用Nginx,你可以听example.com及其所有的子域,然后将子域作为自定义请求头(X-Subdomain)传递给节点。

example.com.conf:

server { 
    listen   *:80; 
    server_name  example.com *.example.com; 

    set $subdomain ""; 
    if ($host ~ ^(.*)\.example\.com$) { 
     set $subdomain $1; 
    } 

    location/{ 
     proxy_pass   http://127.0.0.1:3000; 
     proxy_set_header X-Subdomain  $subdomain; 
    } 
} 

app.js:

var express = require('express'); 
var app = express(); 

app.get('/', function(req, res) { 
    res.end('Subdomain: ' + req.headers['x-subdomain']); 
}); 

app.listen(3000); 

这是使用的Nginx和节点一起的一个简单的例子。你可以看到更详细的例子,并解释here

+0

然后我可以通过用户详细信息设置子域的内容? – Abdizriel

+0

@Abdizriel我不知道我是否正确地理解了你。你能否详细描述你想达到的目标? – Curious

+0

例如我用户名为testuser,用户名为Test,姓名为User。当有人去页testuser.example.com他/她会看到:欢迎测试用户 这是一个简单的例子,Iwan要做的事情更复杂。 – Abdizriel