繁体   English   中英

如何调整我的 NodeJs 服务器代码以响应 HTTPS 请求?

[英]How can I adjust my NodeJs server code to responf to HTTPS requests?

我有一个可以正常工作的小型 nodejs 服务器。 出于安全原因,现在我正在尝试使用“HTTPS”。 我有以下代码,但是当我尝试通过链接 [ http://192.168.2.22:8080/api/users ] 打开 Firefox 中的页面时,在终端上我看到DIRECTING >>> https://192.168.2.22 :8080/api/users但是在浏览器中,我遇到了这个错误,而不是预期的响应:

安全连接失败 连接到 192.168.2.22:8080 时发生错误。 SSL 收到超过最大允许长度的记录。

错误代码:SSL_ERROR_RX_RECORD_TOO_LONG

// Modules /////////////////////////////////////////////////////////////////////
const db = require('./db.js');

// Packages ////////////////////////////////////////////////////////////////////
const colors = require('colors');
const express = require('express');
const app = express();
const fileUpload = require('express-fileupload');
const fs = require('fs');

// Constant Variables //////////////////////////////////////////////////////////
const PORT_SERVER = 8080;
const HOST = '192.168.2.22';

////////////////////////////////////////////////////////////////////////////////
app.use(express.json({limit: '50mb'}));
// app.use(express.urlencoded({limit: '50mb'}));

// set up a route to redirect http to https
app.get('*', function(req, res) {
    console.log('DIRECTING >>> https ://' + req.headers.host + req.url);
    res.redirect('https://' + req.headers.host + req.url);
});

app.get('/api/users/', async (req, res) => {
    console.log('CHECK POINT !!!');
    let users = await db.db.get_users();
    console.log("USERS : " + users);
    res.send(users);
});

// have it listen on 8080
app.listen(PORT_SERVER, () => console.log(`Listen at ${PORT_SERVER}...`));

我该如何解决这个问题? 我找不到可以轻松应用于我的代码的解决方案,我是 NodeJs 的新手

提前致谢

您尚未为 SSL 配置服务器。使用 https 模块配置 SSL,如下所示。 在此示例中,我为 Http 创建了两个 express,一个为 https,因为我们不能在同一端口上同时运行 http 和非 https。

 const express = require('express');
 const   http = require('http'),
 const    https = require('https')
 const fs = require('fs')
 const httpApp = express()
 const app = express()

const httpsOptions = {
    key: fs.readFileSync("server.key"),
    cert: fs.readFileSync("server.crt")
};
httpApp.set('port',80);
httpApp.get("*", function (req, res, next) {
    res.redirect("https://" + req.headers.host + "/" + req.path);
});

app.set('port', 443);
app.enable('trust proxy');

http.createServer(httpApp).listen(httpApp.get('port'), function() {
    console.log('Express HTTP server listening on port ' + httpApp.get('port'));
});

https.createServer(httpsOptions, app).listen(app.get('port'), function() {
    console.log('Express HTTPS server listening on port ' + app.get('port'));
});

从非 http 重定向到 https 的最佳方法是使用 Nginx web 服务器作为反向代理,并在 Nginx 配置文件中定义重定向规则。

client--->nginx reverse proxy(with SSL and redirection rules)-->express server

尝试将端口更改为 443,https 默认在 443 上运行!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM