如何配置Google Compute Engine以对nodejs服务器使用HTTPS?

时间:2015-05-16 04:12:00

标签: node.js ssl socket.io google-compute-engine gcloud

我想运行nodejs&使用https / SSL的谷歌计算引擎中的socket.io服务器。

我从https://cloud.google.com/compute/docs/load-balancing/http/ssl-certificates安装了自签名证书。

现在,如何启用nodejs服务器以使用https协议?

谢谢,

2 个答案:

答案 0 :(得分:4)

下面是代码,我在nodejs中用于HTTPS,

var app = require('express')();
var https = require('https');
var fs = require('fs');
var PORT = 443;

var options = {
  key: fs.readFileSync('XYZ.key'),
  cert: fs.readFileSync('ABC.crt')
};

var server = https.createServer(options, app).listen(PORT, function () {
  console.log("Express listening on port " + PORT);
});

// Post request.
var req_res = function (req, res) {
  console.log("[200] " + req.url);
  var fullBody = '';

  // Read post data.
  req.on('data', function (chunk) {
    fullBody += chunk.toString();

    if (fullBody.length > 1e6) {
      // FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
      req.connection.destroy();
    }
  });

  // Send response.
  req.on('end', function () {
    // empty 200 OK response for now
    res.writeHead(200, {
      'Content-Type': 'application/json'
    });
    res.end(JSON.stringify({
      'success': true
    }));
  });
};

// Hello World
app.get('/*', function (req, res) {
  res.status(200).send('Hello World...');
});

// Post request to receive notifications.
app.post('/post', req_res);

关于谷歌计算引擎,您只需要从防火墙启用443端口。

gcloud compute firewall-rules create allow-https --description "https server" --allow tcp:443 --format json

答案 1 :(得分:0)

您需要许多东西来配置nodeJS服务器以使用HTTP。我建议Nginx(http://nginx.org/en/docs/http/configuring_https_servers.html)设置https端口443连接以终止于nginx层。然后使用Nginx中的proxy_pass指令将所有这些连接代理到NodeJS服务器。您也可以在Nginx中使用upstream指令。

你也必须在非https设置中执行此操作,因为nodeJS不应该监听默认的80端口,因为它是系统端口,而nodeJS不允许你启动进程除非你以sudo身份运行(再次不推荐)。