How do I Configure Google Compute Engine to use HT

2019-05-07 03:57发布

I want to run nodejs & socket.io server in google compute engine with https / SSL.

I installed self-signed certificate from https://cloud.google.com/compute/docs/load-balancing/http/ssl-certificates.

Now, How Do I enable nodejs server to use https protocol?

Thanks,

2条回答
贼婆χ
2楼-- · 2019-05-07 03:58

Below is the code, which I used for HTTPS in nodejs,

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

Regarding google compute engine, you just need to enable 443 port from firewall.

gcloud compute firewall-rules create allow-https --description "https server" --allow tcp:443 --format json
查看更多
狗以群分
3楼-- · 2019-05-07 04:09

You need a number of things to configure a nodeJS server to use HTTPs. I would suggest Nginx (http://nginx.org/en/docs/http/configuring_https_servers.html) to set up https port 443 connections to terminate at the nginx layer. Then proxy all these connections using the proxy_pass directive in Nginx to your NodeJS server. You could use the upstream directive in Nginx as well.

You would have to do this in a non-https set up as well, since nodeJS should not be listening on the default 80 port as it is a system port, and nodeJS won't allow you to start the process unless you run as sudo (again not recommended).

查看更多
登录 后发表回答