美文网首页
express同一端口上使用HTTP和HTTPS

express同一端口上使用HTTP和HTTPS

作者: 陆遥远 | 来源:发表于2020-12-16 09:19 被阅读0次
      1. 创建httpx.js文件,文件内容如下:
    let net = require('net');
    let http = require('http');
    let https = require('https');
    
    exports.createServer = (opts, handler) => {
        let server = net.createServer(socket => {
            socket.once('data', buffer => {
                // Pause the socket
                socket.pause();
                // Determine if this is an HTTP(s) request
                let byte = buffer[0];
                let protocol;
                if (byte === 22) {
                    protocol = 'https';
                } else if (32 < byte && byte < 127) {
                    protocol = 'http';
                }
                let proxy = server[protocol];
                if (proxy) {
                    // Push the buffer back onto the front of the data stream
                    socket.unshift(buffer);
                    // Emit the socket to the HTTP(s) server
                    proxy.emit('connection', socket);
                };
                // As of NodeJS 10.x the socket must be 
                // resumed asynchronously or the socket
                // connection hangs, potentially crashing
                // the process. Prior to NodeJS 10.x
                // the socket may be resumed synchronously.
                process.nextTick(() => socket.resume());
            });
        });
    
        server.http = http.createServer(handler);
        server.https = https.createServer(opts, handler);
        return server;
    };
    

    -2. 创建app.js文件,文件内容如下:

    var express = require('express');
    var https = require('https');
    var http = require('http');
    var fs = require('fs');
    
    //同步读取密钥和签名证书
    var options = {
        key:fs.readFileSync('./keys/server.key','utf-8'),
        cert:fs.readFileSync('./keys/server.crt','utf-8')
    };
    var app = express();
    var httpsServer = https.createServer(options,app);
    var httpServer = http.createServer(app);
    
    app.get('/',function(req,res,next){
        res.send('Hello Express+https');
    });
    //https监听3000端口
    httpsServer.listen(3000);
    //http监听3001端口
    httpServer.listen(3001);
    
    

    -3 启动node服务

       node app.js
    

    -4. 测试

    http://127.0.0.1:8080/ 接口可正常访问

    https://127.0.0.1:8080/ 接口可正常访问

    相关文章

      网友评论

          本文标题:express同一端口上使用HTTP和HTTPS

          本文链接:https://www.haomeiwen.com/subject/hwnwgktx.html