【问题标题】:How to create subdomain for user in node.js如何在 node.js 中为用户创建子域
【发布时间】:2015-09-06 05:21:24
【问题描述】:

我想在我的应用程序的 username.domain.com 上分享一些用户信息。用户创建帐户后,子域应该可用。

我找到了在这种情况下可能有用的好模块:Express Subdomain

我怎样才能使用该模块正确地做到这一点?也许这个模块不是那么有用,所以我应该使用哪个?

【问题讨论】:

  • 我建议你在 Node.js 前面使用 Nginx。 Nginx 允许您毫无问题地处理子域。
  • 此外,启动 webserver 需要监听 80 端口,而这又需要 root 权限。出于安全考虑,使用 root 权限启动 Node 是一种不好的做法。但是您可以(并且应该)以 root 身份启动 Nginx,并以普通用户身份启动 Node。

标签: javascript node.js express


【解决方案1】:

正如我在 OP cmets 中提到的,在 Node 前面使用 Nginx 网络服务器将是一个很好的选择,因为这是一种监听 80 端口的安全方式。您还可以使用 Nginx 更高效地提供静态文件(脚本、样式、图像、字体等),以及在单个服务器中拥有多个站点。

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

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 和 Node 的简短示例。您可以查看更详细的示例说明here

【讨论】:

  • 如何通过用户 od 详细信息设置子域的内容?
  • @Abdizriel 我不确定我是否理解正确。你能详细描述一下你想要达到的目标吗?
  • 例如,我有一个用户名为 testuser 的用户,他的名字为 Test 和姓氏 User。当有人访问 testuser.example.com 页面时,他/她会看到:Welcome Test User 这是一个简单的例子,Iwan 要做的事情更复杂。
  • @Abdizriel 只是将用户的数据保存在数据库中。对于 MySQL,您的查询可能类似于:SELECT first_name, last_name FROM users WHERE username=?。其中? - 您的子域取自req.headers['x-subdomain']
  • 对@Oleg 所说的内容的补充,理想情况下,由于您拥有用户数据/帐户,因此您将希望拥有一些执行数据库查询以防止 SQL 注入的存储过程。无论静态页面多么简单,您的后端都应该受到保护。您的域上应该有一个简单的 API,可以由子域调用来查询数据库,而不是通过子域中的函数直接查询数据库。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 2011-04-08
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多