3

我有一个结构如下的nodejs服务器:(app.js):

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);
};

我有一个运行上述 app.js 的 cluster.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);
}

我的问题是以下设置在我的 localhost 虚拟机环境(在 mac 主机上运行的 ubuntu 虚拟机)上运行良好。我可以使用 dev.domain.com:3456 访问 nodejs 服务器。

但是,当我将它移动到我的生产机架空间服务器(相同的环境配置和设置)时,并尝试通过 prod.domain.com:3456 访问它

浏览器挂了一会儿然后返回Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.

我做了一些研究,发现了一些线索,但并没有太大帮助。

有任何想法吗?

更新:

当我将端口降低到 90 时,它似乎可以正常工作,这很有趣。我现在要把它留在 90 端口,但如果有人知道为什么会这样的话。

谢谢

4

3 回答 3

1

当我的请求变得太大 (>65K) 时,我收到此错误消息。我的解决方案是将数据减少为几个片段。

于 2014-03-06T07:05:41.177 回答
0

临时解决方法:

当我将端口降低到 90 时,它似乎可以正常工作,这很有趣。我现在要把它留在 90 端口,但如果有人知道为什么会这样的话。

谢谢

于 2013-08-20T14:32:22.970 回答
0

当您从前端添加额外的“/”以调用后端 API 时,也可能会遇到此问题例如:我的路由是 baseUrl/api/customer,但我正在向 baseUrl/api/customer/ 发送请求,至少它不起作用这是我的情况。太笨了,没注意到这一点。也许这对某人有帮助

于 2020-07-27T11:58:09.870 回答