2013-07-11 57 views
7

您好,我正嘗試在Ubuntu 12.04.2上的端口80上運行我的node.js webserver。這臺機器是一個乾淨的安裝,我唯一安裝的是openssh-server nodejs和screen。當我在端口80上運行節點webservice時,我可以導航到瀏覽器並輸入localhost,我將查看我的網站。但是,當我嘗試從另一臺機器訪問該網站時,我超時了。然而,我可以SSH和PING機器。我如何設置Ubuntu,使我的node.js應用程序服務於我的網站。該網站工作得很好,當我把它放在我的筆記本電腦上(Windows 7)和一臺不同的筆記本電腦通過我的IP地址訪問該網站。如何獲取端口80上的node.js express.js

我不想運行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); 

UPDATE:網絡上有一個巨大的防火牆

回答

10

你以root運行?或者至少有權使用80端口?在Linux系統上,您需要特殊的用戶權限才能使用端口1024或更低的端口。嘗試以root用戶身份運行sudo node ...

+0

yes即時運行sudo節點webservice.js – Jareddlc

+0

理想情況下,您不希望以root用戶身份運行服務器,而是使用特權用戶,以便如果存在安全漏洞(如未處理的注入),違規用戶不會在主機上沒有根。 –

0

您正試圖從另一臺計算機訪問?如果是,則綁定到地址0.0.0.0而不是locahost

將應用程序綁定到0.0.0.0意味着它應該可以從計算機外部訪問(即綁定在所有接口上)。綁定到localhost將服務限制在本地訪問。

要確認您的應用程序的內部工作原理嘗試:

wget -O - http://127.0.0.1/ 

...運行Web服務器在同一臺計算機上。

+0

你能詳細說一下嗎? 'netstat -an | grep「LISTEN」'產生 'tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN' – Jareddlc

+0

啊,看起來它已經綁定到'0.0.0.0'。那麼你是否嘗試在內部訪問該網站?如果是這樣,那麼你可能有防火牆問題。嘗試輸入'sudo iptables -L -v -n' - 你的防火牆是否處於活動狀態? –

+0

我剛剛通過SSH做了那個wget命令,如果它的防火牆我得到HTML內容 – Jareddlc