我有一個服務器的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號港口,但如果有人有答案,爲什麼這是。
感謝
你在你的prod服務器上使用nginx嗎?如果是,那麼有可能你的nginx沒有被配置爲向你的nodejs服務器代理傳遞請求。檢查[this](https://gist.github.com/joemccann/644282)獲取nginx使用nodejs作爲代理傳遞的設置指南。 – smitrp 2013-04-10 06:04:24
你是否以root身份運行3456實例?由於端口90工作,並且端口90意味着您必須以root用戶身份運行進程,如果您之前沒有以root身份運行它,則可能是一個權限問題。空響應聽起來像你的應用程序崩潰,它產生任何日誌? – robertklep 2013-04-10 06:05:44
@robertklep我做了兩個作爲根,所以這似乎不是問題 – kirushanths 2013-04-13 04:15:22