nodejs koa-generator 项目(koa2),配置 https 来监听https请求

Nodejs koa2项目怎么 配置 https 来监听https请求呢?

前置情况:

# 使用 koa-generator 构建的nodejs项目。
# 项目部署到 腾讯云,CentOS 7.6。
# 安装 pm2 

项目根目录,在 /bin/www 文件中已有代码:

var app = require('../app');
var debug = require('debug')('demo:server');
var http = require('http');
// (1)

var port = normalizePort(process.env.PORT || '3000');
var server = http.createServer(app.callback());
// (2)

server.listen(port, (err) => {
    // 添加 http 监听反馈
    if (err) {
        console.log('http 服务启动出错', err);
    } else {
        console.log('http 服务器-server运行在 '+ port +' 端口');
    }
});
server.on('error', onError);
server.on('listening', onListening);

function normalizePort(val) {
    var port = parseInt(val, 10);
    if (isNaN(port)) {
        return val;
    }
    if (port >= 0) {
        return port;
    }
    return false;
}
function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }
    var bind = typeof port === 'string' ?
        'Pipe ' + port :
        'Port ' + port;
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}
function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string' ?
        'pipe ' + addr :
        'port ' + addr.port;
    debug('Listening on ' + bind);
}

在项目 /bin/www 文件中追加https服务:

1、项目中下载 https 、koa-sslify 资源包,是配置 https 服务的前提:
npm install https koa-sslify
2、在 /bin/www 中, (1) 处添加如下代码:

(添加https 服务需要有域名证书,获取证书的条件简单但繁琐,不是本次的主要内容,能看到这篇文章,说明你已经了解怎么获取了)

// https 服务需要的包
const fs = require('fs');
const https = require('https');
const sslify = require('koa-sslify').default;

// 路径为证书放置的位置 
const options = {
    key: fs.readFileSync('./cert/www.wffw88.top.key'),
    cert: fs.readFileSync('./cert/www.wffw88.top_bundle.crt'),
}
app.use(sslify());  // 添加sslify
// 创建https服务 (避免影响其他项目443端口冲突,可变更端口,如444)
const httpsPort = {port: 444};
https.createServer(options, app.callback()).listen(httpsPort, (err) => {
    if (err) {
        console.log('https: 服务启动出错', err);
    } else {
        console.log('https: 服务器-server运行在 ' + httpsPort.port + ' 端口');
    }
})
3、如果需要自动将 http 请求转向 https ,则在 /bin/www 中,(2) 处添加以下代码。不需要则不添加。
//将 http 请求自动重定向到 https
server.on('request', (request, res) => {
    res.writeHead(301, { 'Location': 'https://xxxxx.com' });
    res.end();
});
注意:

如果端口冲突,且不需要占用的程序,可关闭程序。


      
有问题反馈加微信:mue233 私聊问我 微信公众号:焦虑自愈教程,分享过去走出来的经验
52软件资源库 » nodejs koa-generator 项目(koa2),配置 https 来监听https请求