2013-04-10 45 views
3

我有一個服務器的NodeJS結構類似這樣: (app.js):+的NodeJS HTTPS +表達 - 錯誤324(淨值:: ERR_EMPTY_RESPONSE)

var fs = require('fs'), 
    http = require('http'), 
    https = require('https'), 
    express = require('express'), 
    connect = require('express/node_modules/connect'), 
    app = module.exports = express(); 

var ssl_options = { 
    key: fs.readFileSync('/etc/nginx/ssl/server.key'), 
    cert: fs.readFileSync('/etc/nginx/ssl/server.crt') 
}; 

var server = https.createServer(ssl_options, app); 

// EXPRESS 

// app.set('view options', { layout: false }); 

var auth_token = "asdfasfdasdfasdf"; 
var express_session_id = "express.sid"; 

app.configure(function() { 
    app.use(express.cookieParser()); 
    app.use(express.session({secret: auth_token, key: express_session_id})); 

    app.set("view options", {layout: false}); 
}); 

app.get('/', function (req, res) { 
    console.log (req.headers); 
    fs.readFile(__dirname + '/index.html', function(err, data){ 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.write(data, 'utf8'); 
     res.end(); 
    }); 
}); 

app.listen = function(port) { 
    server.listen(port); 
    console_log.log('info', "COTTONMOUTH server listening on port " + port); 
}; 

我運行上面的應用程序一個cluster.js .js文件:

var cluster = require('cluster'), 
    os = require('os'), 
    workers = {}; 

if (cluster.isMaster) { 

    cluster.on('exit', function(worker, code, signal) { 
     if (worker.suicide === false) { 
      var exitCode = worker.process.exitCode; 
      console.error('worker ' + worker.process.pid + ' died ('+exitCode+'). restarting...'); 
      cluster.fork(); 
     } 
    }); 

    var n = process.env.PROC || os.cpus().length; 
    for(var i = 0; i < n; i++) { 
     cluster.fork(); 
    } 

    process.on('SIGTERM', function() { 
     console.log('[MASTER] Going for shutdown...'); 
     for (var id in cluster.workers) { 
      console.log('\tkilling worker: ' + cluster.workers[id].process.pid); 
      cluster.workers[id].destroy(); 
     } 
     console.log("[MASTER] Here's looking at you, kid."); 
    }); 

} else { 
    require('./app').listen(process.env.PORT || 3456); 
} 

我的問題是,下面的設置工作正常,在我的本地虛擬箱環境(Ubuntu的虛擬運行在Mac主機上)。我能夠通過dev.domain.com:3456訪問nodejs服務器。

然而,當我提出這個我生產Rackspace公司的服務器(同樣的環境CONFIGS和設置),並嘗試通過prod.domain.com:3456

瀏覽器掛起了一下訪問它,並返回Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.

我做了一些研究,並找到一些線索,但沒有太大的幫助。

任何想法?

UPDATE:

當我放下口下降到90,似乎工作是有趣的。 我現在要把它留在90號港口,但​​如果有人有答案,爲什麼這是。

感謝

+0

你在你的prod服務器上使用nginx嗎?如果是,那麼有可能你的nginx沒有被配置爲向你的nodejs服務器代理傳遞請求。檢查[this](https://gist.github.com/joemccann/644282)獲取nginx使用nodejs作爲代理傳遞的設置指南。 – smitrp 2013-04-10 06:04:24

+0

你是否以root身份運行3456實例?由於端口90工作,並且端口90意味着您必須以root用戶身份運行進程,如果您之前沒有以root身份運行它,則可能是一個權限問題。空響應聽起來像你的應用程序崩潰,它產生任何日誌? – robertklep 2013-04-10 06:05:44

+0

@robertklep我做了兩個作爲根,所以這似乎不是問題 – kirushanths 2013-04-13 04:15:22

回答

0

臨時Workaroud:

當我放下口下降到90,似乎工作是有趣的。現在我將暫時留在90號港口,但​​如果有人有答案,爲什麼這是。

謝謝

+0

我也面臨同樣的問題,但仍然無法解決此問題 – 2015-10-29 05:07:16

1

當我的請求變得太大(> 65K)時,我得到了這個錯誤信息。我的解決方案是將數據縮減爲幾個片段。

相關問題