9

您好,我正在尝试在 Ubuntu 12.04.2 的端口 80 上运行我的 node.js 网络服务器。这台机器是全新安装的,我唯一安装的是 openssh-server nodejs 和 screen。当我在端口 80 上运行节点 web 服务时,我可以导航到浏览器并输入 localhost,然后我将查看我的站点。但是,当我尝试从另一台机器访问该站点时,我会超时。但是,我可以 SSH 和 PING 机器。我如何设置 ubuntu 以便我的 node.js 应用程序为我的网站提供服务。当我将它托管在我的笔记本电脑(Windows 7)上并且另一台笔记本电脑通过我的 IP 地址访问该网站时,该网站工作得很好。

我不想运行 Apache 或 nginx。有没有办法做到这一点?

    //---ExpressJS
    console.log('Initializing Express...');
    var express = require('express');
    var app = express();

    //---Middleware: Allows cross-domain requests (CORS)
    var allowCrossDomain = function(req, res, next){
      res.header('Access-Control-Allow-Origin', '*');
      res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
      res.header('Access-Control-Allow-Headers', 'Content-Type');
      next();
    }

    ///---MemoryStore
    //var MemoryStore = express.session.MemoryStore;

    //---App config
    app.configure(function() {
      var pub_dir = __dirname + '/public';
      app.set('views', __dirname + '/views');
      app.set('view engine', 'jade');
      app.set("trust proxy", true);
      app.use(express.favicon(__dirname+'/favicon.ico'));
      app.use(express.compress());
      app.use(express.bodyParser());
      app.use(express.cookieParser());
      app.use(express.session({secret: 'cogswell'}));
      app.use(express.methodOverride());
      app.use(allowCrossDomain);
      app.use(app.router);
      app.use(express.static(__dirname));
    });

    //---Start listening
    var port = 80;
    app.listen(port);
    console.log('Webservice started on port: '+port);

更新:网络有一个巨大的防火墙

4

2 回答 2

12

你是以root身份运行的吗?或者至少有使用80端口的权限?在 Linux 系统上,您需要特殊的用户权限才能使用端口 1024 或以下。尝试以root身份运行sudo node ...

于 2013-07-11T20:38:35.743 回答
0

您正在尝试从另一台计算机访问?如果是这样,则绑定到地址0.0.0.0而不是locahost.

绑定应用程序0.0.0.0意味着它应该可以从计算机外部访问(即绑定在所有接口上)。而绑定到localhost将服务限制为可在本地访问。

要确认您的应用程序在内部运行,请尝试:

wget -O - http://127.0.0.1/

...在运行 Web 服务器的同一台计算机上。

于 2013-07-11T20:56:14.550 回答