2013-07-11 5 views
7

Привет, я пытаюсь запустить веб-сервер node.js на порту 80 на Ubuntu 12.04.2. Эта машина является чистой установкой, и единственное, что я установил, - это openssh-server nodejs и экран. Когда я запускаю узел webservice на порт 80, я могу перейти к браузеру и ввести localhost, и я просмотрю свой сайт. Однако, когда я пытаюсь получить доступ к сайту с другой машины, я получаю тайм-аут. Однако я могу использовать SSH и PING. Как настроить ubuntu так, чтобы приложение node.js обслуживало мой сайт. Сайт отлично работает, когда я размещаю его на своем ноутбуке (Windows 7), а другой ноутбук получает доступ к сайту по моему ip-адресу.Как получить node.js express.js на порт 80

Я не хочу запускать 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

бежит как корень? Или, по крайней мере, имеете разрешение на использование порта 80? В системах Linux вам понадобятся специальные пользовательские привилегии для использования порта 1024 или ниже. Попробуйте запустить с правами root, используя sudo node ...

+0

yes im running sudo node webservice.js – Jareddlc

+0

В идеале вы не захотите запускать свой сервер как пользователь root, а скорее привилегированный пользователь, так что если есть нарушение безопасности (например, необработанная инъекция), нарушенный пользователь не делает У вас есть корень на хосте. –

0

Вы пытаетесь получить доступ с другого компьютера? Если это так, то привяжите к адресу 0.0.0.0 вместо locahost.

Привязка приложения к 0.0.0.0 означает, что он должен быть доступен снаружи компьютера (т. Е. Связан на всех интерфейсах). В то время как привязка к localhost ограничивает доступ к сервису локально.

Чтобы подтвердить, что ваше приложение работает внутри попробовать:

wget -O - http://127.0.0.1/ 

... на том же компьютере, на котором работает веб-сервер.

+0

вы можете уточнить? 'netstat -an | grep "LISTEN" 'производит ' tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN' – Jareddlc

+0

Ah похоже, что он уже привязан к '0.0.0.0'. Так вы пытались получить доступ к сайту внутри страны? Если это так, возможно, у вас проблема с брандмауэром. Попробуйте ввести 'sudo iptables -L -v -n' - у вас активен брандмауэр? –

+0

Я только что сделал команду wget через SSH, и я получаю содержимое HTML – Jareddlc