使用greenlock-express和web sockets

4

寻找使用greenlock-express与安全的websocket服务器结合设置HTTPS的示例。

1个回答

3
这就是我设置的方式。关键是使用由greenlock-express生成的tslOptions手动设置HTTPS服务器,然后以常规方式将Websocket服务器连接到它上面。采用这种方法,HTTP到HTTPS的重定向必须手动完成。
起初,我无法让事情正常工作,因为我没有在服务器上打开443端口。确保您这样做,否则HTTPS将无法正常工作!

const express = require('express');
const http = require('http');
const https = require('https');
const WebSocket = require('ws');

//EXPRESS TO BUNDLE APP
let my_app = express();
let dir = __dirname + '/../app';
io_app.use(express.static(dir));
//Just serving static files from a sibling directory called /app

//// SETUP HTTP GREENLOCK

let greenlock = require('greenlock-express').create({

  // Let's Encrypt v2 is ACME draft 11
  version: 'draft-11'

    ,
  server: 'https://acme-v02.api.letsencrypt.org/directory'
    // Note: If at first you don't succeed, switch to staging to debug
    // https://acme-staging-v02.api.letsencrypt.org/directory

    // You MUST change this to a valid email address
    ,
  email: 'test@example.com'

    // You MUST NOT build clients that accept the ToS without asking the user
    ,
  agreeTos: true

    // You MUST change these to valid domains
    // NOTE: all domains will validated and listed on the certificate
    ,
  approveDomains: ['example.com', 'www.example.com']

    // You MUST have access to write to directory where certs are saved
    // ex: /home/foouser/acme/etc
    ,
  configDir: require('path').join(require('os').homedir(), 'acme', 'etc')

    // Join the community to get notified of important updates and help me make greenlock better
    ,
  communityMember: true

    // Contribute telemetry data to the project
    ,
  telemetry: true

    ,
  debug: true

});

//// REDIRECT HTTP TO HTTPS

let redirectHttps = require('redirect-https')();
let acmeChallengeHandler = greenlock.middleware(redirectHttps);
http.createServer(acmeChallengeHandler).listen(80, function() {
  console.log("Listening for ACME http-01 challenges on", this.address());
});

//// HTTPS SERVER + WEBSOCKETS

let server = https.createServer(greenlock.tlsOptions, my_app);

let ws = new WebSocket.Server({
  server
});

ws.on('connection', function(ws, req) {
  //websocket on connection... 
});

server.listen(443);


谢谢,将一个websocket示例添加到https://git.coolaj86.com/coolaj86/greenlock-express.js/src/branch/master/examples/websockets.js。 - coolaj86
@CoolAJ86,你能否也添加一个socket.io的例子吗?var server = lex.listen(80, 443); var io = require('socket.io')(server); - Koder
@Koder想基于现有示例之一创建PR吗? - coolaj86
@coolaj86,“官方”的示例链接不再可用。我得到了 404 错误页面。 - vidstige
2
@vidstige 刚刚移动到了一个目录:https://git.coolaj86.com/coolaj86/greenlock-express.js/src/branch/master/examples/websockets/server.js - coolaj86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接