【发布时间】:2014-09-17 18:51:20
【问题描述】:
虽然标题可能难以理解,但我希望我能解释得足够清楚。
这是我的设置: 我拥有域名 www.mysite.com 虽然 Godaddy。它使用 no-ip 指向特定的 ip(比如说 1.2.3.4)
设置一些子域(通过A记录):
www.dev.mysite.com -- points to 1.2.3.4
www.pi.mysite.com -- points to 1.2.3.4
www.mysite.com -- also points to 1.2.3.4
此设置全部托管在运行 node.js 的树莓派上(带有用于网络服务器的 express)。
我的节点文件(server.js)开始一切看起来像这样:
var express = require("express"), http = require("http");
var server = express();
// proxy server
http.createServer(function (request, response) {
if (request.headers.host === "mysite") {
console.log("Request made to mysite.com");
res.redirect("http://localhost:5555");
} else if (request.headers.host === "dev.mysite") {
console.log("Request made to dev.mysite.com");
res.redirect("http://localhost:5556");
} else if (request.headers.host === "pi.mysite") {
console.log("Request made to dev.mysite.com");
// DROP ALL TRAFFIC EXCEPT FOR PORT 21
} else {
console.log("Request made to something else");
}
}).listen(80);
process.setuid("pi"); // go back to being a basic user
// main server
server.use(express.static(__dirname + "/main"));
server.listen(5555, function(err) {
console.log("server listening on port 5555");
});
// dev server
server.use(express.static(__dirname + "/dev"));
server.listen(5556, function() {
console.log("server listening on port 5556");
});
以下是我的问题。我认为它们都驻留在上述文件中
server.use() 需要以某种方式位于每个 server.listen() 内部,因为每个服务器都有自己的文件夹,用完
我的 res.redirect() 不起作用
我不知道如何丢弃除端口 21 之外的所有流量。这里的重点是给我一个简单的 url,以便我可以 ssh 进入。但由于 pi.mysite.com 指向与 www 相同的 ip。 mysite.com,我不想提供我的主页。所以我想我会把所有流量都丢到那个子域。
注意事项:
我还想提一下,我已经尝试了 nginx 和 http-proxy 的流量路由。我对他们两个都有问题,并想我会尝试这种内联方法以使其更简单。原来事情没那么简单。
我想将这一切保存在 1 个文件 (server.js) 中,以便我可以将“node server.js”放入启动脚本中以在启动时运行。
我知道这可能不是最有效的方法。我在学习。忍耐一下
我也知道我不应该以 root 身份运行它(使用 sudo)。我这样做是为了在端口 80 上绑定我的侦听器。我使用 setuid("user") 来解决这个问题(希望如此)
这就是我现在能想到的。请让我知道如何修复和改进此过程。我会根据需要用更多信息更新问题。谢谢
【问题讨论】:
标签: node.js express webserver reverse-proxy http-redirect